更新时值为空时删除记录

时间:2017-02-17 10:05:03

标签: ruby-on-rails

我有一个应用程序,用户可以在其中创建包含许多asset_allocations的篮子。

篮子模型

window.location.href = "myAreaPath/mypage.asp";

AssetAllocation Model

class Basket < ActiveRecord::Base
    has_many :asset_allocations, :dependent => :delete_all
    validates :name, presence: true
    validates_uniqueness_of :name, allow_blank: true

    accepts_nested_attributes_for :asset_allocations, :reject_if => lambda {|a| a[:ratio].blank?}, :allow_destroy => true
end

上面的代码完全适用于创建新记录(当比率为空时忽略所有asset_allocation),但是当比率值为空时,如何删除asset_allocation表中的记录?

可以说,在编辑表单上,我将 allocation2 的值从56更改为空, allocation3 将是新的记录然后点击更新按钮应从数据库中删除 allocation2 并插入 allocation3

Sample Form

1 个答案:

答案 0 :(得分:0)

@Fallenhero是对的。

由于您的accept_nested_attributes已经有 allow_destroy 选项,所以您只需将before_filter中的_destroy:true添加到您要删除的嵌套成员中,具体取决于您的条件。

before_action :add_destroy_option

def add_destroy_option
  params[:basket][:asset_allocations].each_with_index do |a, i|
    params[:basket][:asset_allocations][i][:_destroy] = a[:value].nil?
  end
end

或者,如果您不想在控制器中添加过滤器,您也可以根据您的条件使用jQuery在您的前端设置此 _destroy 参数