如何在Rails中设置select的名称?

时间:2016-02-04 09:05:05

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2

我目前正在浏览我们的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。

2 个答案:

答案 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尝试做什么。