Options_for_select - 如何选择数据库中的内容?

时间:2010-10-20 03:02:09

标签: ruby-on-rails ruby-on-rails-3 drop-down-menu

我有一个复杂的表单(比如Ryan B的Complex Form Railscasts),我可以同时更改几个级别的数据库表。

此下拉框的代码的作用是它向数据库传递正确的整数。但是,尽管经过多次尝试,但我还是无法正确反映数据库的CURRENT值。我该如何理清这段代码?

<%= o.select :weighting, options_for_select([
  ["Correct", "4", {:class=>"bold"}],
  ["Good", "3"],
  ["Average", "2"],
  ["Poor", "1"], 
  ["Incorrect", "0", {:class=>"bold"}] ], :weighting), {},
  html_options = {:class => "listBox", :style=>"float:left;"} %>

感谢。

2 个答案:

答案 0 :(得分:12)

你走在正确的轨道上,但并不完全在那里。

虽然options_for_select的最终参数应该是所选选项的值。您提供的值:weighting是一个符号,与您给定的任何选项的值都不匹配。

您需要提供实际值。如果您使用实例对象来构建表单,如

<%form_for @whatever do |o|%>
...

您可以简单地使用@whatever.weighting.to_s,如下所示:

<%= o.select :weighting, options_for_select([
  ["Correct", "4", {:class=>"bold"}],
  ["Good", "3"],
  ["Average", "2"],
  ["Poor", "1"], 
  ["Incorrect", "0", {:class=>"bold"}] ], @whatever.weighting.to_s), {},
  html_options = {:class => "listBox", :style=>"float:left;"} %>

否则,有一种方法可以将对象从表单块变量o中删除。但这与内部情况有关,可能会随着升级而改变。

编辑:如果您正在使用字段和多个部分,则可以使用对象访问器从表单构建器块变量中获取特定对象。

重用上面这样的例子来使用表格中该实例部分中每个子实例的当前权重。

<% form_for @parent do |p| %>
  ...
  <% p.fields_for :children do |c| %>
  ...
  <%= c.select :weighting, options_for_select([
      ["Correct", "4", {:class=>"bold"}],
      ["Good", "3"],
      ["Average", "2"],
      ["Poor", "1"], 
      ["Incorrect", "0", {:class=>"bold"}] ], c.object.weighting.to_s), {},
      html_options = {:class => "listBox", :style=>"float:left;"} %>
  ...
  <% end %>
<% end %>

这也可用于部分内容。

答案 1 :(得分:0)

第二次尝试=)

<%= f.label :priority %>
<%= f.select(:priority, options_for_select({"Stat" => "1", "Urgent" => "2", "Regular" => "3", "Safety" => "4"}, @servicerequest.priority), :prompt => "Choose") %>