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