考慮具有必需的「標籤」屬性和任意的Rails 3模式「富」與下列協會「名稱」的模式:寫HAS_MANY:通過協會和回調
has_many :names, :dependent => :destroy
has_many :special_names, :through => :names, :source => :label, :conditions => { 'special_names.label' => 'special' }, :dependent => :destroy
現在是可能的訪問讀取關聯的「special_names」屬性,但寫入使其失敗,因爲AR無法從「條件」中爲所有「特殊名稱」成員設置「標籤」屬性需要設置爲「特殊」協會。
我試圖使用「add_before」關聯回調,但永遠不會用連接模型調用(而是使用「:source」和「Foo」)。
有關如何在模型中處理此問題的任何想法(而不是:在控制器中使用特殊邏輯來處理此問題 - 這就是我目前的處理方式)?
編輯:(關於從Ray Baxter答案)
的關係表示是實際上是一個 「的has_many:通過」 關聯。我再試一次,這次(希望)更好的例子:
# Label is a shared entity which is used in many contexts
has_many :labels, :through => :user_labels
# UserLabel is the join model which qualifies the usage of a Label
has_many :user_labels, :dependent => :destroy
# special_user_labels is the topic of this question
has_many :special_user_labels, :through => :user_labels, :source => :label, :conditions => { 'user_labels.descriptor' => 'special' }, :dependent => :destroy
當你說寫作,你的意思是,像'foo.special_names.build'? – jpemberthy 2011-04-12 17:24:13
這是一個'has_many:through'嗎?這不就是一個有條件的'has_many'嗎? – 2011-04-12 18:17:59
jpemberthy:是的 - 我特別想用與hbtm關聯(..._id)相同的方式使用表單屬性和質量分配。 – yawn 2011-04-14 08:06:24