2012-01-09 56 views
0

我將不勝感激您對此的幫助不會刪除錶行:reject_if空?不工作 - 當字段爲空

我有2種型號:

class Author < ActiveRecord::Base 
    has_one :authornote, :foreign_key => "author_fk", :dependent => :destroy 
    accepts_nested_attributes_for :authornote, :reject_if => lambda { |a| a[:note_value].blank? }, :allow_destroy => true 
end 

class Authornote < ActiveRecord::Base 
    belongs_to :author, :foreign_key => :author_fk 
end 

在我的形式,我有以下field_for:

<% remote_form_for @author, :url => { :controller => "authors", :action => "update_author_note" } do |f| %> 
    <div> 
     <% f.fields_for :authornote do |builder| %> 
      <%= builder.text_area :note_value, :rows => 4, :cols => 50 %> 
     <% end %> 
    </div> 
    <%= f.submit 'Update' %> 
<%end%> 

控制器代碼:

def update_author_note 
    author_id = session[:author_id] 
    @author = Author.find(author_id) 

    if @author.update_attributes(params[:author]) 
    respond_to do |format| 
     format.js 
    end 
    else 
    respond_to do |format| 
     format.html { redirect_to add_author_note_path(:sub_id=> session[:sub_id]) } 
    end 
    end 

end 

當前,如果用戶刪除表單域'note_value'中的所有內容並更新表單,那麼數據行仍存在於'authornote'表中,其中'note_value'列爲空。

我想要的是,如果字段'note_value'是空的,並且用戶單擊更新按鈕,我希望在'authornote'表中刪除具有空列'note_value'的行。

任何建議最欣賞

回答

3

什麼你試圖做你正在試圖做的是不支持的Rails。爲了通過accepts_nested_attributes_for刪除記錄,您必須將_delete: true連同要刪除的記錄的ID一起傳遞。當您拒絕沒有note_value的嵌套記錄時,Rails無法知道您正在嘗試更新這些記錄—,他們完全從參數中缺失。

+0

非常感謝澄清。乾杯 – tanya 2012-01-10 11:20:26