2017-02-17 54 views
0

我有一个应用程序,用户可以在其中创建包含许多asset_allocations的篮子。当更新时的值为空时删除记录

篮型号

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 

AssetAllocation型号

class AssetAllocation < ActiveRecord::Base 
    belongs_to :basket 

    validates :ratio, :numericality => { :greater_than => 0 }, allow_blank: true 
end 

上面的代码完美地工作创造新的纪录(它忽略了当比值为空所有asset_allocation),但我怎么能删除记录asset_allocation表的值是否为空值?

比方说,编辑表单上我从56改变allocation2值清空和allocation3将是一个新的记录,然后击中更新按钮应该删除allocation2从数据库插入分配3

Sample Form

+0

我猜你会需要你的病情的before_filter – Fallenhero

回答

0

@Fallenhero是对的。

既然你已经有你的accept_nested_attributes allow_destroy选项,所有你需要做的就是添加_destroy:在真正的before_filter您要根据您的病情来删除嵌套成员。

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 

或者,如果你不想在你的控制器中添加一个过滤器,你还可以设置这个_destroy参数在前端按照使用jQuery

相关问题