【Rails】 두 개의 표를 한데 모아 원하는 열만 추출하고 JSON으로 되돌아오는 견본 코드

5698 단어 초학자RubyRails

개시하다


Rails를 통해 두 테이블을 결합하고 원하는 열만 JSON이 반환하는 샘플 코드로 추출합니다.
이 인코딩으로 만들어진 JSON은 끼워 넣지 않아서 간단하기 때문에 사용하기 쉽다.

컨디션

OS: macOS Catalina 10.15.1
Ruby: 2.6.5
Rails: 6.0.2.1

전제 조건


  • User 모델 및 Post 모델 있음
  • Post와 User1의 여러 관계식
  • 각자의 표 이름은users와posts
  • 연결됨
  • user.rb
    class User < ActiveRecord::Base
      has_many :posts
    end
    
    post.rb
    class Post < ApplicationRecord
      belongs_to :user
    end
    

    원하는 데이터


    각 표의 열 수는 다음과 같다.
    "불필요한 데이터를 갖고 싶지 않아!"
    이 경우 JSON은 #欲しい가 있는 열을 뽑기만 하면 된다.
    - usersテーブル
        - id
        - name #欲しい
        - email
        - ...
    
    - postsテーブル
        - id #欲しい
        - name #欲しい
        - description #欲しい
        - user_id #欲しい
        - date
        - ...
    
    
    이것은 아래 코드로 실현할 수 있다.

    결론


    posts_controller.rb
      def posts_needed
        posts_needed = Post.joins(:user)
        .select("
          posts.id,
          posts.name,
          description, #ここはusersテーブルと名前が被らない
          user_id, #ここはusersテーブルと名前が被らない
          users.name AS user_name #別名を付けられる
          ")
        render json: posts_needed
      end
    

    [포인트]

  • Post.joins(:user)로posts표와users표를 결합
  • 원하는 열 지정.select("カラム1, カラム2, ...")
  • 원래 열 이름이 덮어쓰인 경우posts.name 또는 users.name처럼 テーブル名.カラム名로 지정하지 않으면 둘 다 체크 아웃할 수 없음
  • テーブル名.カラム名 AS 任意名에서 내보낼 열 이름
  • 을 지정할 수 있습니다.
  • 표 이름은 여러 형식
  • 출력


    내보내기(JSON)
    [
        {
            "id": 1,
            "name": "投稿名1",
            "description": "投稿詳細1",
            "user_id": 2,
            "user_name": "Brutus"
        },
        {
            "id": 2,
            "name": "投稿名2",
            "description": "投稿詳細2",
            "user_id": 3,
            "user_name": "Omae Dattanoka"
        },
    ...
    ]
    
    네스트된 것보다 간단하고 사용하기 쉬운 JSON 완성

    끝말


    끝까지 읽어주셔서 감사합니다
    누군가에게 참고가 되었으면 좋겠네요

    참조된 웹 사이트(지금까지 지원해 주셔서 감사합니다)

  • Rails의 내부 결합, 외부 결합 요약 - Qita
  • 좋은 웹페이지 즐겨찾기