我目前正在浏览我们的Rails应用程序以修复错误。作为一个完整的初学者,这一部分:
<%= fields_for live_result_log , :index =>live_result_log.id do |field|%>
<%= field.select(:control_reason_id, ControlReason.where(:delete_flag=>0).collect{|i|[i.reason_name, i.id]},
{:include_blank => false,:selected => live_result_log.control_reason_id}, :class => "select_result") %>
</td>
令我头疼。用例是应该存在多个实时结果日志条目,并且在该页面中创建几个选择对象,具体取决于可以记录条目的方式。但是,使用firebug我能够获得POST信息(格式化以便于阅读):
&live_result_log%5Bcontrol_reason_id%5D=1
&live_result_log%5Bcontrol_reason_id%5D=1
&live_result_log%5Bcontrol_reason_id%5D=1
&live_result_log%5Bcontrol_reason_id%5D=1
&live_result_log%5Bcontrol_reason_id%5D=1
&live_result_log%5Bcontrol_reason_id%5D=4
&live_result_log%5Bcontrol_reason_id%5D=1
&live_result_log%5Bcontrol_reason_id%5D=1
&live_result_log%5Bcontrol_reason_id%5D=1
&live_result_log%5Bcontrol_reason_id%5D=1
&live_result_log%5Bcontrol_reason_id%5D=1
正如您所看到的,POST参数大部分是相同的,因此在提交时,无论我选择什么,control_reason_id都会对所有条目都相同,具体取决于最后一项。如何选择不同的名称以便我可以区分它们?
控制器使用以下方法访问数据:
@send_datas = params[:live_result_log][:control_reason_id]
live_result_log是一个模型。
编辑:因此情节变浓。在该应用程序的一个版本中,rails版本是3.0.9,唯一的区别是这部分:
@send_datas = params[:live_result_log]["#{s}"][:control_reason_id]
它工作正常。 POST数据变成这样:
&live_result_log%5B7321%5D%5Bcontrol_reason_id%5D=1
&live_result_log%5B7322%5D%5Bcontrol_reason_id%5D=3
&live_result_log%5B7323%5D%5Bcontrol_reason_id%5D=5
以便有其他信息来区分参数。
我们用于问题版本的Rails版本是3.2.0。
答案 0 :(得分:0)
我认为您应该使用options_for_select
来创建选项html。
在您的控制器中:
@select_options = ControlReason.where(:delete_flag=>0).collect{|i|[i.reason_name, i.id]}
在你的模板中:
<%= field.select(:control_reason_id, options_for_select(@select_options, live_result_log.control_reason_id),
{:include_blank => false}, :class => "select_result") %>
请参阅文档:options_for_select
答案 1 :(得分:0)
collection_select
可能有所帮助:
<%= fields_for live_result_log , index: live_result_log.id do |field|%>
<%= field.collection_select :control, :reason_id, ControlReason.where(delete_flag: 0), :id, :name %>
<% end %>
虽然我可能错了,因为我不知道你在live_result_log
尝试做什么。