我的rails应用程序中有一个simple_form,我想预先填充 一些带URL参数的字段。
示例网址为:
http://localhost:3000/surveys/new?phone=8675309
使用此代码正确填充电话字段:
<%= simple_form_for @survey, :html => { :class => 'form-horizontal' } do |f| %>
<%= f.input :state, :required => true %>
<%= f.input :zip, :required => true %>
<%= f.input :phone, :required => true, :input_html => { :value => params['phone'] } %>
<% end %>
问题是如果提交的表单没有必填字段 重新加载表单但不保留电话输入值。
如果提交的表单没有zip值 红色URL中带有验证错误的重新加载页面现在是:
http://localhost:3000/surveys
例如,如果状态字段正确但没有邮政编码,则重新加载表单 错误消息msg说zip是必需的。
状态值保留,但手机不是。
我猜它与:value =&gt;有关:电话的f.input中的params ['phone']。
无论如何我可以使用URL参数填充simple_form 在它的初始加载并且如果服务器端验证失败则保留这些值?
非常感谢。
答案 0 :(得分:0)
从您的视图中移除:value
:
<%= f.input :phone, :required => true %>
并使用此网址:
http://localhost:3000/surveys/new?survey[phone]=8675309
这应该生成控制器期望的“标准”survey
参数哈希。在我的测试中,其工作方式与用户键入值相同,并采用通常的验证处理方式。
在控制器内部,哈希称为params[survey]
,其中各个参数表示为params[survey][phone]
,params[survey][zip]
等。
在this answer的帮助下,我发现您可以使用link_to签名link_to(body, url_options = {}, html_options = {})
生成网址:
<%= link_to 'New survey', { :controller => "surveys",
:action => "new",
:survey => { :phone => "8675309", :zip => "10001" } },
{ :target => "_blank" } %>
请注意url_options
是第一个哈希值,在该哈希值中,您有预加载值的survey
哈希值。最后是html_options
的可选哈希值(为了便于说明,我添加了target="_blank"
)。
答案 1 :(得分:0)