我有两个模型:Category和Post,它们通过categories_posts表连接。类别可以通过category_id
字段包含子类别,该字段与父类别字段的id
相关。 Post可以有多个类别(父类别和子类别,或者只有一个子类别)。
类别:
has_and_belongs_to_many :posts
has_many :categories, class_name: "Category", foreign_key: "category_id"
belongs_to :category, class_name: "Category"
发表:
has_and_belongs_to_many :categories
has_and_belongs_to_many :get_categories, class_name: 'Category'
一切正常,我可以获得一个特定类别的帖子:
Category.find(params[:id]).posts
但无法获得具有自己子类别的类别的帖子,如下所示:
Category.where('`id` = :id OR `category_id` = :id', :id => params[:id]).posts
Rails控制台返回:undefined method 'posts' for #<Category::ActiveRecord_Relation:0x00000110f9be40>
我为此编写了正确的SQL查询,但我需要在ActiveRcord的Rails 4中编写相同的查询。
SELECT DISTINCT posts.* FROM posts INNER JOIN categories_posts ON posts.id = categories_posts.post_id WHERE categories_posts.category_id IN (3,10) ORDER BY posts.date DESC
答案 0 :(得分:0)
您正在引用属于类别实例数组上的类别实例的帖子关系。如果您想加载帖子,可以添加.includes(:posts)
。我不确定你的最终用途是什么,但这就是问题所在。
但是,如果您要加载具有该类别或子类别的所有帖子,请执行Post
模型,如下所示:Post.includes(:categories).where('categories.id = :id OR categories.category_id = :id, id: params[:id]).references(:categories)