我希望在用户提交表单时传递自定义参数。我发现了这个question,但我仍然没有找到它。
这些是我在表单页面上的参数:{"email"=>"user@example.com", "controller"=>"devise/passwords", "action"=>"new"}
这是我的表格:
%h2 Forgot your password?
= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| =
f.error_notification
.form-inputs
= f.input :email, required: true, autofocus: true, input_html: { value: params[:email] }
.form-actions
= f.button :button, 'Submit', type: 'submit', name: 'email', value: params[:email]
这种行为在某些时候是否会贬值,或者我做错了什么? 我使用ruby 2.5.1和rails 5.2。
答案 0 :(得分:1)
只需声明您的密码后重置路径,以便传递参数:
def after_sending_reset_password_instructions_path_for(resource_name)
my_path(email: resource.email)
end
如果您成功密码重置页面的路径是collection
路径,则此方法应该有效。如果它是member
路径,则只需添加资源,如:
def after_sending_reset_password_instructions_path_for(resource_name)
my_path(resource, email: resource.email)
end
但我不建议使用member
,因为它可能会泄漏数据。
答案 1 :(得分:0)
您在评论中描述了一些参数传递给控制器然后发生一些重定向的情况。因此,重定向会触发一些新操作,而这些操作并不知道哪些参数已传递给prev操作。
您必须手动传递参数。例如
redirect_to resource_path(resource, email: params[:email])
但是,如果你想显示与使用渲染之前相同的视图而不是重定向。