我有选择标签
<%= 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 %>
答案 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)