可以基于多个" belongs_to"过滤ActiveRecord查询。关系?

时间:2014-04-24 17:47:59

标签: ruby-on-rails ruby-on-rails-4

class Post < ActiveRecord::Base
  belongs_to :user
  belongs_to :category
end

class User < ActiveRecord::Base
  has_many :posts
end

class Category < ActiveRecord::Base
  has_many :posts
end

我希望获得与usercategory有关系的所有帖子。是否有类似可能:

user.category.posts

或者我需要这样做:

user.posts.where(category_id: category.id)

3 个答案:

答案 0 :(得分:0)

尝试: -

user.posts.where(category_id: category.id)

答案 1 :(得分:0)

更改您的关联,例如

class Post < ActiveRecord::Base
 belongs_to :user
 belongs_to :category
end

class User < ActiveRecord::Base
 has_many :post
 belongs_to :category or has_one :category
end

class Category < ActiveRecord::Base
 has_one :user or belongs_to :user
 has_many :posts
end
用户表中的

添加列category_id,或在类别中添加列user_id,因为这两个表之间没有关系。如果没有关系,则无法使用关联API。然后你必须使用手动API来获取数据。就像你提到你的问题一样。

答案 2 :(得分:0)

1-M relationshipUser之间有Post。 在用户模型中,关联应为has_many :posts(注释复数),而不是has_many :post(单数)。

更新您的模型User,如下所示:

class User < ActiveRecord::Base
  has_many :posts  ## Plural posts
end

回答以下问题:

  

获取与用户和类别

有关系的所有帖子

假设您将局部变量usercategory分别作为User模型和Category模型的实例。

例如:

user = User.find(1); ## Get user with id 1
category = Category.find(1); ## Get category with id 1
user.posts.where(category_id: category.id) ## would get you what you need.

此外,user.category.posts无效,因为UserCategory模型没有关联。