オプションの「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/) }
魅力的な作品です - ありがとうございます。私のdatetimeをNULLに戻す方法を知りたいですか? – jmccartie
おそらくparams [:item] [:expire_at] = nilを使って、update_attributesを呼び出すときにこれを強制することができます。 –