在服务器端表单验证期间,Rails simple_form预先填充的输入值丢失

时间:2012-05-13 15:34:33

标签: ruby-on-rails-3 simple-form

我的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 在它的初始加载并且如果服务器端验证失败则保留这些值?

非常感谢。

2 个答案:

答案 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)

谢谢Mark,

我在一段时间后又重新发布了这个问题,在这里得到了正确答案:

Rails simple_form server side validations lost URL params