我有一个复杂的表单(就像Ryan B的复杂表单Railscast),其中我有几个级别的数据库表同时被更改。
此下拉框的代码的工作原理是将正确的整数传递到数据库。但是,尽管尝试了很多次,我还是不能让它正确地反映数据库的当前值。我如何整理这段代码?
<%= 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;"} %>谢谢。
发布于 2010-10-20 12:11:56
你走上了正确的道路,但并不完全正确。
而options_for_select的最后一个参数应该是所选选项的值。您提供的:weighting值是一个与任何给定选项的值都不匹配的符号。
你需要给出实际的值。如果您使用instance对象来构建表单,如
<%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 %>这也可以用在分音中。
发布于 2012-12-18 03:33:30
第二次尝试=)
<%= f.label :priority %>
<%= f.select(:priority, options_for_select({"Stat" => "1", "Urgent" => "2", "Regular" => "3", "Safety" => "4"}, @servicerequest.priority), :prompt => "Choose") %>https://stackoverflow.com/questions/3974448
复制相似问题