-
ID:eBNFB2 さんの質問

Rails4.2.0にて以下の様なネストされたModel構造のとき、
viewからeachで[Content]モデルのデータにアクセスする方法がわからず困っています。
Model構造は以下のようになっており、Associationや、
dbでのresoucesの設定は終わっている状態です。

[User] -1:n- [Article] -1:n- [Content]

user#showを以下のようにすることで必要用件は実装できたのですが、他にもっとスマートな方法がありましたら教えていただきたいです。どうかよろしくお願いいたします。

[users_controller.rb]
def show
@user = User.find(params[:id])
@contents = Content.where(:user_id => @user.id)
end

[users/show.html.slim]
ul
- @user.articles.each do |article|
li = article.id

- @contents.each do |content|
- if article.id == content.id
p = content.title

みんなの回答 1 件

ID:jQtjGC さんの回答

n+1問題でデータベースが死ぬのでincludes使いましょう。下のコードだと3クエリだけで済みます。
ただlimit制限かけるような場合はもう少し工夫が必要です。
あえて余計なことを言うと、今のあなたのスキルだとわからないこと一つ一つ聞いているとキリがなくなってしまうので、パーフェクトRailsのように体系的な書籍で勉強した方がいいと思います。
@user = User.includes(:articles => [:contents]).find(params[:id)
@user.articles.each do |article|
article.contents.each do |content|
p = content.title
end
end

最終更新日:2015-04-24 (1,928 views)

関連するトピックス

ページ上部に戻る