reject_if为空?不工作 - 字段为空时表行未删除

时间:2012-01-09 16:00:32

标签: ruby-on-rails

感谢您对此的帮助:

我有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'的行。

任何建议都表示赞赏

1 个答案:

答案 0 :(得分:3)

当您尝试执行此操作时,Rails不支持您尝试执行的操作。要通过accepts_nested_attributes_for删除记录,您必须传递_delete: true以及要删除的记录的ID。当您拒绝没有note_value的嵌套记录时,Rails无法知道您正在尝试更新这些记录 - 他们完全没有从参数中删除。