我有一个表单,用户可以在其中添加他们的生日。现在,每当有人提交此表单时,他都会添加一个生日,因为日期输入始终具有值。
有没有办法可以添加一个复选框 - 只有选中它时,生日应该保存到记录中?如果未选中该复选框,则应删除birthday
的当前值。
= simple_form_for resource, as: resource_name, url: registration_url(resource_name) do |f|
= f.input :another_field
= f.input :birthday_set?, as: :boolean # or something else?
= f.input :birthday
= f.input :submit
答案 0 :(得分:0)
在控制器中,您可以执行以下操作:
def create
user = User.new
user.birthday = params[:user][:birthday_set?] ? params[:user][:birthday] : nil
params[:user].delete(:birthday, :birthday_set?)
user.update_attributes(user_params)
...
end
只需从参数的:birthday
元素中删除:birthday_set?
/ permit
个键。
我会考虑将:birthday_set?
移到form_tag
字段中,使其位于params[:user]
之外,然后您就不必担心从参数中清除它。如果你没有将它存储在数据库中,那么无论如何这都更有意义。
这样可以避免被抛出unpermitted parameters
,并完全按照您的要求行事。
当切换复选框时,您还可以尝试使用js禁用前端的:birthday
字段,但无论如何仍然希望处理此问题。
就个人而言,我会沿@ atomAltera的路线走下去并使用attr_accessor
和before_save
,但如果你想避免这种情况,这种方法就可以了。