【Rails】 시야 파일을 사용하지 않고 파라미터 ID도 존재하지 않는 상황에서 관련 데이터를 얻는다.[API 모드용]

6763 단어 RubyRails

개시하다


비망록입니다.
여기, 홈 화면("/")에서
  • 「データ全件」
  • 「1つのデータに関連付けされているデータの総数」
  • 「1つのデータに関連付けされているハッシュのデータ」
  • , 우리는 index 동작을 통해 상술한 데이터를 얻을 것입니다.
    예를 들어, Qita 등의 애플리케이션을 만드는 경우
  • 「記事全件」
  • 「1つの記事に関連付けされているコメントの総数」
  • 「1つの記事に関連付けされているタグのハッシュデータ」
  • 라는 인상을 남겼다.全てのデータはハッシュとして取得します。

    컨디션


    Ruby: 2.6
    Rails: 5.2

    모형의 예(제작과정 생략)



    코드


    1. 먼저 모든 기사 확보

    def index
      @all_article = Article.all
    end
    

    2.1 한 문장과 관련된 주석의 총수 얻기

    def index
      @all_article = Article.all
    
      # [ { 1: "コメント数" }, { 2: "コメント数"  }, ... ]という形のデータを作成する。
      # article.commentsでループ処理した記事データからコメントを呼び出している。
      @article_count = @all_article.map{ |article| 
        [article.id, article.comments.count.to_s]  #もしコメント数を表示させるならto_sで文字列化する。
      }.to_h 
    
      # 上記のコメントデータのidと記事のidが一致した場合に、コメント数をcount属性に格納する
      @article_count.map do |key, value|
        @all_article.map do |article|
          if article.id === key
            article["count"] = value
          end
        end
      end
    
      # => [ { "id": 1, "count": "コメント数" }, { "id": 2, "コメント数" }, ... ]のように得られる
    end
    
    

    3.1 한 문장과 관련된 라벨의 해시 데이터 가져오기(위와 대체적으로 같다)

    def index
      # 記事全件
      @all_article = Article.all
      # コメント数
      @article_count = @all_article.map{ |article| 
        [article.id, article.comments.count.to_s]
      }.to_h 
      @article_count.map do |key, value|
        @all_article.map do |article|
          if article.id === key
            article["count"] = value
          end
        end
      end
    
      # 1つの記事が所有するタグをハッシュで取得
      @all_article.map{ |article|
        [article.id, article.article_tags.all]
      }.to_h
    
      # => { 
      #      "1": [
      #         { "id": 1, "tag_name": "Rails" }, 
      #         { "id": 2, "tag_name": "React" }, 
      #          ... ,
      #      ], 
      #      "2": [ 
      #         { "id": 1, "tag_name": "JavaScript" }, 
      #         { "id": 2, "tag_name": "Qiita" }, 
      #          ... ,
      #      ]
      #     }
    end
    
    위에서 말한 바와 같이 위의 상태를 유지하면 컨트롤러가 엉망이 될 수 있기 때문에 모델 파일에서 실례적인 방법으로 추출하는 것이 좋다고 생각합니다.

    최후


    백엔드와 프런트엔드를 분리하여 SPA 애플리케이션을 만들 때 관찰시야 파일을 사용하지 않기 때문에 루트 URL이 있는 홈 화면에서 관련 데이터를 얻는 방법을 찾기 어렵습니다.
    그리고 결국 이런 결론을 얻었지만 틀리거나 더 좋은 방법이 있다면 꼭 알려주세요. 감사합니다!🙇‍♂️

    좋은 웹페이지 즐겨찾기