2015-12-23 3 views
3

Я пытаюсь сделать многопозиционное выпадающее меню с диалоговым окном для параметров поиска. Я могу сделать выпадающий мультивыбор, но не может получить/передать результирующие данные. (отредактирован/новая информация будет выделена курсивом)Как сделать рельсы multi select dropdown work

Я считаю, что корень проблемы в том, что мне нужно изменить раздел разрешений в моем контроллере, чтобы отразить, что я передаю хэш/массив. Если я посмотрю на результирующую запись, то 2 поля, которые я устанавливаю как мультивыбор, показывают как ноль. Однако, если я заставляю ошибку, параметры, показанные рельсами, показывают правильный выбор. поэтому я считаю, что проблема может заключаться в разрешении.

Это выглядит как

*def search_params 
     params.require(:search).permit(:document_title, 
            :summary, 
            :owner, 
            :category, 
            :file_name, 
            :doc_to_email, 
            :categories_attributes => [:name]) 
    end* 

Я добавил: categories_attributes => [: имя], чтобы попытаться получить контроллер, чтобы хэши, но это не сработало.

поле выбора является

<%= f.select :category[], options_for_select(@categories.sort), {:include_blank => true}, {:multiple => true, :size =>10} %> 

, но это дает мне

.erb где линия # 41 поднятую:

неверное число аргументов (0 за 1..2) Трассировка включения шаблона: app/views/search/new.html.erb

Я думал, что мне нужно установить категорию как массив с [], но, очевидно, я что-то пропустил.

Категория - это поле строки в таблице Searches.

+0

Попробуйте как '<% = f.select: категория [], options_for_select (@ categories.sort), {: include_blank => верно, : несколько => верно,: размер => 10}%>' – Abhi

ответ

4

Не нужны скобки [] после имени поля, так как Rails добавляет их автоматически.

Смотрите пример здесь: http://apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag

select_tag "colors", "<option>Red</option><option>Green</option><option>Blue</option>".html_safe, multiple: true 
# => <select id="colors" multiple="multiple" name="colors[]"><option>Red</option> 
# <option>Green</option><option>Blue</option></select> 

В вашем случае выбранные значения будут доступны в виде массива в params[:search][:category] после отправки формы.

Если вы используете сильные параметры, убедитесь, что в списке разрешений есть :category => [].

+0

Это не сработало. Кажется, что, когда я меняю выбор на несколько, данные не записываются для этих полей. Я нашел что-то, что сказал, что мне нужно изменить разрешенную часть контроллера, чтобы отразить тот факт, что я передаю массив/хэш. Я собираюсь изменить свое оригинальное сообщение, чтобы отразить эту информацию. –

+0

Помогает ли это? http://stackoverflow.com/a/16555975/1242470 –

+0

ЭТО РАБОТАЕТ !!! - Ссылка, которую вы предоставили, имела решение. Я добавил ': category => []' в раздел разрешений. Теперь передаются параметры, которые являются массивами/хэшами. –

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