我有一個簡單的用戶:編輯**位爲清楚起見,和山姆的建議如何確保關聯的屬性對於驗證關聯是否正確?
class User < ActiveRecord::Base
# <snip other attribs>
has_many :handles
has_one :active_handle, :class_name => "Handle"
validates_each :active_handle, :allow_nil => true do |record, attr, value|
record.errors.add attr, "is not owned by the correct user" unless record.handles.include?(value)
end
end
和把手型號:
class Handle < ActiveRecord::Base
belongs_to :user
attr_accessible :user_id
validates :user_id,
:presence => true,
:numericality => true
attr_accessible :name
validates :name,
#etc...
end
現在,我想檢查,當設置User.active_handle關聯,該句柄由正確的Handle.user_id擁有。我試圖在自定義驗證中執行此操作,並且還在用戶模型的驗證方法中執行此操作。兩種方式,它都與我想要的完全相反,它將處理的user_id設置爲執行檢查的用戶。
我在我的繩索末端,顯然我不明白的東西,谷歌沒有讓我到任何地方,我還沒有。
ETA:我也試圖操縱與條件HAS_ONE協會,似乎辜負了......
has_one :active_handle,
:class_name => "Handle",
:conditions => ['user_id =?', '#{self.id}']
因此,用戶可以有很多句柄,並且你想檢查用戶是否有句柄,因爲'active_handle'。那是對的嗎? – s84 2011-03-03 20:35:27
另外,你怎麼更新'active_handle'?你是從用戶對象還是從句柄對象做到這一點。或者換句話說,你試圖更新'active_handle'的控制器是什麼? – s84 2011-03-03 20:36:14
正確,目前我正在嘗試從用戶控制器執行此操作。 – thecatwasnot 2011-03-03 20:47:38