2017-08-15 7 views
0
class Post < ActiveRecord::Base 
    has_many :categorizations 
    has_many :categories, through: :categorizations 

class Categorization < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :post 
end 

class Category < ActiveRecord::Base 
    has_many :categorizations 
    has_many :posts, through: :categorizations 
end 

上記の関連については、次のクエリを実行する必要があります。Railsはレコードコレクションのすべてのレコードを検索します

@posts = Post.includes(:categories).where(active: true) 
@categories = @posts.categories 

明らかにこのクエリ@categories = @posts.categoriesは動作しませんが、私はこれをどのように行うのでしょうか?

更新:I以下の両方の答えと を追加し、このエラーをあなたのCategoryクラスに

Category Load (1.9ms) SELECT "categories".* FROM "categories" WHERE "categories"."post" IN (SELECT "posts"."id" FROM "posts") 
SQLite3::SQLException: no such column: categories.post: SELECT "categories".* FROM "categories" WHERE "categories"."post" IN (SELECT "posts"."id" FROM "posts") 
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: categories.post: SELECT "categories".* FROM "categories" WHERE "categories"."post" IN (SELECT "posts"."id" FROM "posts") 
+0

あなたは@categoriesを持っていれば、あなたのコード行は 'Category.someting'で始まる必要があるので、これはできません。これで修正関係が得られました。@categories = Category.joins(:posts).where(投稿:{アクティブ:true}) ' – djothefou

答えて

0

を得る:

@posts = Post.includes(:categories).where(active: true) 
@categories = Category.where(post: @posts) 

class Category < ActiveRecord::Base 
    has_many :categorizations 
    has_many :posts, through: :categorizations 

次に、あなたのような何かを行うことができます

+0

エラーが発生します。私の更新を確認してください – asdlfkjlkj

0

1つのクエリで:

あなたが関係を宣言する必要
@categories = Category.joins(:posts).where(posts: { active: true }) 
+0

私はエラーが発生します。私の更新を確認してください – asdlfkjlkj

+0

このコードでそのエラーが発生していますか?私は結合を見ることができません。カテゴリモデルに関連付けの部分がないのでしょうか? –

+0

すべてのアソシエーションを追加しました – asdlfkjlkj

0

まず:

あなたはこれを忘れてしまった場合

belongs_to :post 

そして、あなたのCategoryモデルに

has_many :categorizations 
has_many :posts, through: :categorizations 

を持っている必要がありますあなたのCategorizationモデルでは、アクティブレコードpostがCateの列であるとしますなぜなら、あなたには関係があることを決して伝えていないからです。

+0

私はすでにそれらのものがあると思います – asdlfkjlkj

関連する問題