2017-02-19 1 views
0

私はこれが非常に単純な質問かもしれないと感じますが、私は1時間以上立ち往生していますので、ここでそれを投げて、すべてのモデルにuserIDを追加するのを避ける

私のRailsアプリケーションでは、ユーザーにはページがあり、ページには段落があります。ページはユーザーとの関係がbelongs_toであるため、特定のユーザーにとって重要とマークされた段落をすべて取得する必要があります。

したがって、パラグラフがページとページに持つ既存の関係を使用して、ユーザーにどのようにしたらよいですか?

私が行うことはできません。

current_user.pages.paragraphs.where(important: true)

current_user.pagesコレクションを返すので、そのコレクションにはパラグラフ方法がないこと、それはエラーのため。

私は段落にUserフィールドを追加してそこに関係を結ばなければなりませんか?私が行うことができるように:

current_user.paragraphs.where(important: true)

またはそれを行う回避する方法はありますか?助けてくれてありがとう!

答えて

1

Userモデルにhas_many :paragraphs, through: :pagesの関連付けを設定する必要があります。これによりUser#paragraphsが作成され、より複雑なクエリを作成することなくcurrent_user.paragraphs.where(important: true)に電話することができます。

詳細はActiveRecord::Associations.has_manydocuments hereです。

あなたのモデルは、次にようになります:

class User < ApplicationRecord 
    ... 
    has_many :pages 
    has_many :paragraphs, through: :pages 
    ... 
end 

class Page < ApplicationRecord 
    ... 
    has_many :paragraphs 
    belongs_to :user 
    ... 
end 

class Paragraph < ApplicationRecord 
    ... 
    belongs_to :page 
    ... 
end 
+1

はいはいはい、これはナゲット、ありがとうどういたしまして@PaulHarker –

+0

です!お力になれて、嬉しいです :) –

関連する問題