hrs*_*ono 4 forms ruby-on-rails
我有选择标签
<%= f.select :gender, ["M", "F"], include_blank: "---" %>
Run Code Online (Sandbox Code Playgroud)
如果其他字段有错误,即使我之前选择了一个选项,选择标签也会重置为“---”。
我发现的解决方案是使用collection_selectActiveRecord 模型作为选项值对。
有没有其他方法可以做到这一点?
谢谢
[编辑]
@Micah 的答案是正确的,但由于我的表单是嵌套的,因此语法不同。
这是我的代码:
<%= f.fields_for :users do |ff| %>
...
<%= ff.select :gender, ["M", "F"], include_blank: "---",
selected: ff.object.gender ? ff.object.gender : "" %>
...
<% end %>
Run Code Online (Sandbox Code Playgroud)
当我处理错误时,我通常会render再次显示上一页,因此我将首先解释如何处理。
当您渲染视图时,传递到上一个命令params[:object][:gender]中的参数会保留下来,这意味着您将在返回视图时将其作为参数。因此
<%= f.select :gender, ["M", "F"], include_blank: "---", selected: params[:object] ? params[:object][:gender] :"" %>
Run Code Online (Sandbox Code Playgroud)
会将所选值设置回第一次选择的值。基本上它所做的是接受一个条件,然后在同一行中提供一个 if/else。(conditional) ? if true do this : else do this. 在这种情况下,条件是params[:object]存在(意味着您之前曾尝试创建/编辑一次),如果是,则重新分配值,否则留空并选择默认值,即您的“---”。
如果您使用redirect_to,您实际上必须通过重定向手动将参数传回,但这相当简单,只需执行以下操作:
redirect_to new_object_path(params)
| 归档时间: |
|
| 查看次数: |
1693 次 |
| 最近记录: |