我有一个应用程序,用户可以在其中创建包含许多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 。
答案 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 参数