2017-11-04 8 views
1

"ボタン"に関連付けられた "メッセージ"に関連付けられたネストフォーム "レター"があります。Railsのネストされたフォーム、空白の場合は拒否、編集時のレコードの削除

class Letter < ApplicationRecord 
    validates :campaign_name, :presence => true 

    belongs_to :core_bot 
    has_many :messages, dependent: :destroy 
    has_many :cards, dependent: :destroy, inverse_of: :letter 
    has_many :filters, dependent: :destroy 
    has_many :analytic_deliveries, dependent: :destroy 
    has_many :analytic_reads, dependent: :destroy 
    has_many :analytic_sends, dependent: :destroy 


    accepts_nested_attributes_for :filters, allow_destroy: true, :reject_if => :all_blank 
    accepts_nested_attributes_for :messages, allow_destroy: true, :reject_if => :all_blank 
    accepts_nested_attributes_for :cards, allow_destroy: true, :reject_if => :all_blank 
end 

私のメッセージモデル::私は "BUTTON_TEXT" と "button_url" は空欄となっている場合は、ボタンのエントリを保存しない

class Message < ApplicationRecord 
    validates :content, :presence => true 

    belongs_to :letter, optional: true 
    has_many :buttons, dependent: :destroy 

    accepts_nested_attributes_for :buttons, :reject_if => Proc.new { |att| att[:button_text].blank? && att[:button_url].blank? }, allow_destroy: true 
end 

は、ここに私の手紙モデルです。しかし、編集時に、ボタンが作成され、そのボタンを削除したい場合(「button_text」と「button_url」の空白)、レコードを削除したいと考えています。

どうすればいいですか?私はafter_actionメソッドをやってみることを考えましたが、もっと良い方法がありますか? button_textbutton_urlの両方のための :allow_blank => true, on: :edit

属性、あなたMessageモデルから:reject_ifステートメントを削除し、存在を検証:、唯一の編集上の空白のエントリを許可し、指定されたアクションを使用してButtonモデルに検証を追加するには

+0

作成時にbutton_textフィールドとbutton_urlフィールドが空白でない場合。次に、編集時のボタンフィールドが入力されます。 – AlphaNico

+0

削除ボタンを追加しますか?私はこれがどのように機能するのか分かりません。 – AlphaNico

+0

はい!しかし、ユーザーがボタンフィールドの作成時に入力したものを削除すると(彼はフィールドを空白にします)、ボタンの入力は私のモデルで拒否されるので更新されません:/ – AlphaNico

答えて

1

あなたのButtonのすべての属性on: :createのこのようにして、検証は互いに干渉しません。単にユーザーが追加することで、「編集」でレコードを削除することができ

validates_presence_of :button_url, on: :create 

recrodを削除するには:あなたがそうのようなあなたのButtonモデルにあなたの検証を移動することを検討することをお勧めします空の属性を持つupdateができるようにするには

+0

'validates:button_url、:presence = > true、:allow_blank => true、on::edit'ボタンのモデルでは、空白の値でエントリを更新しません。私は私のメッセージモデルのreject_ifが以前に呼ばれたと思いますか? – AlphaNico

+0

拒否ifを削除し、また、空白なしで作成時のプレゼンスを検証するボタンモデルに定期的な検証を追加します。このように編集と作成は異なる動作をします。 – MisterCal

+0

もこれをサポートするために私の答えを更新しました。 – Liroy

1

あなたのdeleteアクションへのリンク:

# edit.html.erb 
<%= link_to "Delete", button_path(@button), :confirm => "Are you sure?", :method => :delete %> 
+0

ありがとうございました! – AlphaNico

関連する問題