2012-05-05 44 views
1

我有从DB,其中一种是通过车型之间的关联获取数据的问题。Rails 3 - 通过“关联” - 如何从数据库中获取数据?

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

这里是如何看起来像我的模型:

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

这里做一个方式:

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); 
+0

似乎是工作!谢谢! – user984621

+0

yippie!乐意效劳 – tybro0103

相关问题