2013-12-10 65 views
1

我想拒絕如果記錄是重複在這裏是代碼。accepted_nested_attributes_for:如何拒絕一個記錄,如果它的重複

accepts_nested_attributes_for :member_im_messenger_names, allow_destroy: true , reject_if: lambda {|attributes| puts attributes.inspect 
attributes['im_screen_name'].blank? or MemberImMessengerName.where('member_id=? AND im_screen_name=? AND im_messenger_name_id=?',self.id,attributes['im_screen_name'],attributes['im_messenger_name_id']).count>0 } 

我無法在此代碼塊中獲取當前模型ID。我試過self.id和屬性[:id],但都是徒勞的。

請建議我如何得到身份證。因爲self.id返回null。

+0

如果'屬性[:編號]'丟失,就意味着你的形式不提交ID。你可以在提交表單時顯示你的'params'的樣子嗎?或者更好,表單視圖本身? – piersadrian

+0

基本上self.id不是fields_for屬性,它聲明瞭accepted_nested_attributes_for的模型屬性。 – Baran

+0

在'reject_if' lambda中,'self'是模型類而不是模型對象。屬性方法(包括'id')僅在模型對象上可用。我們需要查看您的參數和表單以瞭解更多信息。 – piersadrian

回答

0

我這樣做使用下列內容:

accepts_nested_attributes_for :member_im_messenger_names, allow_destroy: true, reject_if: :im_already_exists_or_empty  


def im_already_exists_or_empty(attributed) 
    return true if attributed['im_screen_name'].blank? or MemberImMessengerName.where('member_id=? AND im_screen_name=? AND im_messenger_name_id=?',self.id,attributed['im_screen_name'],attributed['im_messenger_name_id']).count>0 
    false 
end 
相關問題