Rails 3 - 关联“通过” - 如何从数据库中获取数据?

时间:2012-05-05 16:39:38

标签: sql ruby-on-rails-3 associations models

我从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)

我很感激每一个建议!

谢谢

1 个答案:

答案 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);