1

我的 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

例如,如果状态字段正确但没有邮政编码,则重新加载表单并显示错误消息,说明需要 zip。

状态值被保留,但手机没有。

我想这与手机的 f.input 中的 :value => params['phone'] 有关。

无论如何,我是否可以在 simple_form 的初始加载中填充 URL 参数,并在服务器端验证失败时保留这些值?

非常感谢。

4

2 回答 2

0

谢谢马克,

不久前我再次重新发布了这个问题,并在这里得到了正确的回答:

Rails simple_form 服务器端验证丢失 URL 参数

于 2012-11-08T09:44:34.917 回答
0

:value从您的视图中删除:

<%= f.input :phone, :required => true %>

并使用此网址:

http://localhost:3000/surveys/new?survey[phone]=8675309

这应该生成survey控制器期望的“标准”参数散列。在我的测试中,这与用户输入值的效果相同,并使用通常的验证处理。

在控制器内部,使用表示为、等params[survey]的各个参数调用散列。params[survey][phone]params[survey][zip]

在这个答案的帮助下,我发现您可以生成带有 link_to 签名的 URL 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"为了说明而添加的)。

于 2012-11-08T02:32:36.203 回答