2012-05-05 42 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

相關問題