1

我在从数据库中获取数据时遇到问题,模型关联类型通过.

在我的网站上,我有一个类别,如体育、新闻、天气等。当用户登录并选择了想要查看文章的类别时,我只想显示这些文章。

这是我的模型的样子:

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)

我会感谢每一个建议!

谢谢

4

1 回答 1

1

这是一种方法:

Article.where(:category_id => current_user.categories.map {|c| c.id})

这将创建 2 个查询。第一个将返回当前用户类别的列表。然后 rubymap​​ 函数将创建一个包含这些类别的 id 的数组。然后,第二个查询将返回 category_id 在 ids 数组中的文章列表。第二个查询将类似于:

select articles.* from articles where articles.category_id in(1,2,3);
于 2012-05-05T16:46:26.370 回答