2011-02-07 5 views
2

オプションの「expire_at」日時を持つ投稿があります。Rails/ActiveRecord:チェックボックスが選択されていない場合は、datetimeをnullに設定します。

「custom_expire_at」チェックボックスをオンにすると、この日時を自分のフォームから保存しようとしています。チェックされていない場合は、datetimeをNULLに設定する必要があります。

私は、チェックボックスの値がない場合expire_atパラメータを中傷しようとしました:

# Delete expiration dates if box is not checked 
if params[:item][:custom_expire_at] 
    params[:item].delete(:custom_expire_at) 
else 
    params[:item].delete(:expire_at) 
end 

しかし、expire_atは、マルチパラメータです:

"expire_at(1i)"=>"2011", "expire_at(2i)"=>"2", "expire_at(3i)"=>"10", "expire_at(4i)"=>"21", "expire_at(5i)"=>"32" 

は、この日時は、選択し破壊し、完全に避けるようにしようjQueryを介して - 多くはむしろparamsからそれをポップアップします。

要約: 1)これらのパラメータを削除したい場合は、どうすれば削除できますか? 2)expire_atを取り除くことができたとしても、値をNULLに戻す方法はわかりません。 expire_atをnilに設定すると、私のモデルは更新を無視します。

def ensure_expire_at_has_a_value 
    self.expire_at ||= nil 
    end 

前もって感謝します!私が代わりにあなたのモデルでそれをやってお勧めし

 
params.delete_if{ |key, value| key.match(/^expire_at/) } 

答えて

2

custom_expire_atattr_accessorを作成します。あなたのフォームがそれに接続されていることを確認してください。 !それは、チェックボックスを送り返すものですのでcustom_expire_at = '1' ところで

は、あなたが'1'に対してチェックしている場合

self.expire_at = NULL:次に、これを行うbefore_validationメソッドを作成します。

+0

魅力的な作品です - ありがとうございます。私のdatetimeをNULLに戻す方法を知りたいですか? – jmccartie

+0

おそらくparams [:item] [:expire_at] = nilを使って、update_attributesを呼び出すときにこれを強制することができます。 –

0

:あなたはすべてのexpire_atパラメータを削除するためにdelete_ifを使用することができ、マルチパラメータを回避するには

関連する問題