2015-03-23 3 views
3

Я использую рельсы form_tag helper, с select_tag для выпадающего списка в форме. Для данной опции в раскрывающемся списке я должен иметь возможность передать 3 значения. Можно ли это сделать с помощью select_tag?Передайте несколько значений с помощью Rails select_tag

Данные, которые используются для заполнения выпадающего списка, отформатированы как массив хэшей, ниже приведен пример формата данного элемента в массиве.

{ name: page['name'], page_id: page['id'], access_token: page['access_token'] } 

Итак, после отправки формы я хочу получить каждое из этих значений в контроллере в качестве параметров.

Форма использования select_tag

<%= form_tag '/facebook_credentials' do %> 
    <%= select_tag(:option, options_for_select(session['facebook_pages'].collect { |x| [x[:name] ] })) %> 
    <%= submit_tag 'Save', class: 'button expand' %> 
<% end %> 

По умолчанию select_tag позволяет только одно значение, есть работа вокруг этого или более эффективный способ для достижения результата я ищу?

ответ

1

Вы можете найти «другие значения хэш», получая хэш, который вы только что выбрали имя:

# view 
select_tag(:option, options_for_select(session['facebook_pages'].collect { |x| [x[:name] ] }) 

# controller's action (where you submit your form) 
selected_hash = session['facebook_pages'].find{ |x| x[:name] == params[:option] } 

Этот код основан на том факте, что каждый хэш в опционам select_tag имеет уник :name «s значение

+0

Мне нравится это решение, спасибо. –

1

по ruby on rails f.select options with custom attributes есть два пути:

1) Храните ваши ценности в каждом option в качестве атрибутов данных. Создайте прослушиватель событий в своем теге select, который добавит скрытые входы с правильными именами на основе атрибутов данных и значений параметров. Эти скрытые входные данные будут отправлены на сервер.

2) Составьте значения option с определенным форматом, объединяющим ваши данные, а затем проанализируйте их на сервере.

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