TLDRでの句:句は、ネストされた(ダウンネストの1つのまたは2段階のいずれか)で動作するようにどこで取得することはできませんhas_manyの関連今すぐのRails:ネストされたhas_manyの関連
#Author.rb
has_many :posts
#Post.rb
belongs_to :author
has_one :post_setting
#PostSetting.rb
#Has attributes like draft (bool), flagged(bool), etc.
belongs_to :post
、私はあればAuthorにassociationを作成しようとすると、post_setting.draft = falseのすべての投稿が検索されます。たとえば、以下のようになります。残念ながら、代わりに次のエラー
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "post_setting"
で失敗
has_many :published_posts,
-> {
includes(:post_setting)
.where(post_setting: {draft: false})
.distinct
},
class_name "Post"
、私は同様に次の操作を実行できるようにしたいのですが - 一般的に
#Group.rb
has_many :authors
has_many :posts,
-> {
includes(:post_setting)
.where(post_setting: {draft: false})
.distinct
},
through: authors
を、I私は、どのように/協会/協会での作業が含まれているかについてのルールについては、あまり明確ではないと感じています。記事の範囲を作成者のhas_many
に含めるよりも、スコープを作成することをお勧めしますか?
ありがとうございました!
PS。私はRails 4.2.5を使用しています。これは混乱することができますが、一般的にjoins
とincludes
は関連名を使用しながらの条件は、基本となるテーブル名を使用し
has_many :published_posts,
-> {
includes(:post_setting)
.where(post_settings: {draft: false}) # Note the plural table name
.distinct
},
class_name "Post"
:クエリは、あなたが適切なネーミングを使用する必要があります動作させるために
素早く答えて名前を指摘してくれてありがとう。その場合、私はまだ次のエラーを受け取ります: 'PG :: UndefinedColumn:エラー:列post_settings.draftが存在しません'何がうまくいかない可能性についての考え? – geoboy
'db/schema.rb'の' post_settings'テーブルスキーマをここに投稿できますか? –
実際、あなたのソリューションはうまくいった - ありがとう! 2番目の部分については、「参照モデルで定義されたスコープ」を使用して説明しました。どのようにスコープを 'has_many'関係で使うことができますか?公開された投稿の「投稿」のスコープを定義したとします。 'Group.rb'や' Author.rb'でどのように使うことができますか?マージを使用しますか? (パフォーマンスは効率的ですか?) – geoboy