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

ssc*_*rus 5 ruby-on-rails ruby-on-rails-3 drop-down-menu

我有一个复杂的形式(如Ryan B的复杂形式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;"} %>
Run Code Online (Sandbox Code Playgroud)

谢谢.

EmF*_*mFi 12

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

而最终的参数options_for_select应该是所选选项的值.您提供:weighting的值是与您的任何给定选项的值不匹配的符号.

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

<%form_for @whatever do |o|%>
...
Run Code Online (Sandbox Code Playgroud)

你可以简单地用作@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;"} %>
Run Code Online (Sandbox Code Playgroud)

否则,有一种方法可以从窗体块变量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 %>
Run Code Online (Sandbox Code Playgroud)

这也可以用于部分.