Rails - 在Form验证失败后选择未预先选择的标签

时间:2014-06-11 03:11:54

标签: ruby-on-rails forms

我有选择标签

 <%= f.select :gender, ["M", "F"], include_blank: "---" %>

如果其他字段有错误,则select标签将重置为&#34; ---&#34;即使我之前选择了一个选项。

我找到的解决方案是使用collection_select,它将ActiveRecord模型作为选项 - 值对。

还有其他办法吗?

由于

[编辑]

@Micah的答案是正确的,但由于我的表单是嵌套的,因此它的语法不同。

这是我的代码:

<%= f.fields_for :users do |ff| %>
  ...
  <%= ff.select :gender, ["M", "F"], include_blank: "---",
        selected: ff.object.gender ? ff.object.gender : ""  %>
  ...
<% end %>

1 个答案:

答案 0 :(得分:4)

当我处理错误时,我通常会使用render再次显示上一页,所以我将首先解释如何处理错误。

渲染视图时,传递到上一个命令的参数会继续执行,这意味着当您返回视图时,您将params[:object][:gender]作为参数。因此

<%= f.select :gender, ["M", "F"], include_blank: "---", selected: params[:object] ? params[:object][:gender] :"" %>

会将所选值设置回第一次选择的值。基本上它正在做的是采取条件,然后在同一行中提供if / else。 (conditional) ? if true do this : else do this。在这种情况下,条件是params[:object]存在(意味着您曾尝试过创建/编辑一次),如果是,则重新分配值,否则留空并选择默认值,即“---”。

如果你使用redirect_to,你实际上必须通过重定向手动传递params,但这很简单,只需要以下内容:

redirect_to new_object_path(params)