我的帖子中有一个可选的“expire_at”日期时间。
我正在尝试从我的表单中保存此日期时间如果选中“custom_expire_at”复选框。如果未选中,则日期时间应设置为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
有什么想法吗?提前谢谢!
答案 0 :(得分:2)
要绕过多参数,您可以使用delete_if删除所有expire_at参数:
params.delete_if{ |key, value| key.match(/^expire_at/) }
答案 1 :(得分:0)
我建议你在你的模型中这样做。为attr_accessor
创建custom_expire_at
。确保您的表单已连接到它。然后,创建一个执行此操作的before_validation
方法:
self.expire_at = null if custom_expire_at!='1'
顺便说一句,你正在检查'1'
,因为这是复选框发回的内容。