【Rails】 시야 파일을 사용하지 않고 파라미터 ID도 존재하지 않는 상황에서 관련 데이터를 얻는다.[API 모드용]
개시하다
비망록입니다.
여기, 홈 화면("/")에서
「データ全件」
「1つのデータに関連付けされているデータの総数」
「1つのデータに関連付けされているハッシュのデータ」
예를 들어, 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이 있는 홈 화면에서 관련 데이터를 얻는 방법을 찾기 어렵습니다.
그리고 결국 이런 결론을 얻었지만 틀리거나 더 좋은 방법이 있다면 꼭 알려주세요. 감사합니다!🙇♂️
Reference
이 문제에 관하여(【Rails】 시야 파일을 사용하지 않고 파라미터 ID도 존재하지 않는 상황에서 관련 데이터를 얻는다.[API 모드용]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kurawo___D/items/ab6efe4b164bb7e7eaec텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)