2017-02-17 10 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テーブルの値が空の場合は?

が言うことができます、編集フォームに私が空にするとallocation3は新記録となり、その後、更新ボタンを押すことは、データベースからallocation2を削除する必要があります56からallocation2の値を変更し、インサートアロケーション3

Sample Form

+0

を使用して、あなたの条件に従ってあなたのフロントエンドでこの_destroyパラメータを設定することができますbefore_filter – Fallenhero

答えて

0

@Fallenheroは正しいです。真のbefore_filterで、あなたの条件に応じて、削除したいのネストされたメンバーに:あなたはすでにあなたのaccept_nested_attributesとallow_destroyオプションを持っているので

は、あなたがしなければならないすべては_destroyを追加しています。

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の

関連する問題