我从DB获取数据时出现问题,模型关联类型到之间的位置。
在我的网站上,我有一个类别,如体育,新闻,天气等。当用户登录并选择了类别,从中想要查看文章,那么我想只显示这些制品
以下是我的模特的样子:
class User < ActiveRecord::Base
has_many :user_categories
has_many :categories, :through => :user_categories
end
class Category < ActiveRecord::Base
has_many :articles
has_many :user_categories
has_many :users, :through => :user_categories
end
class UserCategory < ActiveRecord::Base
belongs_to :user
belongs_to :category
end
class Article < ActiveRecord::Base
belongs_to :category
end
但是我仍然找不到方法,如何从用户选择的类别中获取所有文章...我尝试了类似
Article.joins("LEFT JOIN categories ON category.id = user_categories.category_id").where('user_categories.user_id = ?', current_user.id)
我很感激每一个建议!
谢谢
答案 0 :(得分:1)
这是一种方式:
Article.where(:category_id => current_user.categories.map {|c| c.id})
这将创建2个查询。第一个将返回当前用户类别的列表。然后ruby map
函数将创建一个包含这些类别的id的数组。然后,第二个查询将返回其category_id位于id数组中的文章列表。第二个查询看起来像:
select articles.* from articles where articles.category_id in(1,2,3);