2016-02-04 2 views
0

В настоящее время я просматриваю наше приложение Rails для исправления ошибок. Как полный новичок эта часть:Как установить имя для выбора в 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> 

дает мне головные боли. Вариант использования состоит в том, что должно быть несколько записей журнала результатов в реальном времени, и на этой странице создается несколько объектов выбора в зависимости от того, как могут записываться записи журнала. Однако, используя поджигатель я был в состоянии получить информацию 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 представляет собой модель.

EDIT: Так что сюжет сгущается. В одной версии приложения, версия рельсов 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

Я думаю, вы должны использовать 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

+0

Протестировано. Результат тот же. До сих пор нет различий между выбранными объектами. Хороший рефакторинг, хотя я могу его сохранить. – IBG

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.

+0

live_result_log - это модель, которую я считаю. Я попробую, если это поможет. – IBG

+0

Конечно, просто попробуйте. Может быть, это даст вам еще одну перспективу! –

+0

Это не сработало, к сожалению. См. Мое редактирование, теперь я думаю, что это может иметь какое-то отношение к версии Rails. – IBG

Смежные вопросы