1

我正在使用Ruby on Rails 3.0.7,我想設置一個has_many : through動態條件。'has_many:through`記錄關聯的動態條件

在我的模型文件我有:

class Article < ActiveRecord::Base 
    has_many :article_category_relationships, 
    :class_name => 'Article::Categories::ArticleRelationship', 
    :foreign_key => 'article_id', 
    :autosave => true, 
    :dependent => :destroy 
    # Here should be the dynamic condition statement (read below for more 
    # information about this) 

    has_many :article_categories, 
    :through  => :article_category_relationships, 
    :source  => :article_category, 
    :dependent => :destroy 
end 

在相關Article::Categories::ArticleRelationship數據庫表我也有一個created_by_user_id列(其它列article_idcategory_id),它代表誰創造的關係,用戶的id

因此,爲了檢索與用戶相關的文章類別,在上面的Record Association代碼中,我想通過傳遞一個動態條件來過濾:article_category_relationships,該動態條件取決於該用戶的id值。否則,如果我通過id值,則默認值應允許通過使用@article.article_categories代碼檢索所有文章類別。

可能嗎?如果是這樣,我怎麼能在Record Association語句中編碼?

回答

0

我相信你類模型範圍可能是你在找什麼 - 是這樣的:

scope :by_user, lambda {|user| 
    unless user.nil? 
     where('article_category_relationships.created_by_user_id IS ?', user.id). 
     join(:article_category_relationships) 
    end 
} 

這使您可以撥打@article.article_categories.by_user(@user)

+0

將'article_category_relationships'表名直接放在模型文件中是否是一種常見做法? – Backo

+0

嗯,對不起 - 不知道我明白你的意思嗎?你能解釋一下嗎? – polarblau

+0

我的意思是:我已經看到幾次直接在類\模型代碼中放置數據庫表的名稱(對於我來說,我是一個新手,這聽起來很奇怪......);這樣做是常見的做法?那就是那種常用的方法? – Backo

相關問題