ArgumentError неправильное количество аргументов (1 вместо 3..4)

Я получаю ArgumentError для строки №3 в моем файле views / - / new.html.erb, в котором говорится:

"неправильное количество аргументов (1 вместо 3..4)"

<div class='form-group'>
    <%= form.label :category %>
    <%= form.select "category", options_from_collection_for_select([{1 => 'Food'}, {2 => 'Entertainment'}]) %>
</div>

В трассировке приложения указано:

app / views / events / new.html.erb: 14: в block in _app_views_events_new_html_erb__1569841425540097418_70204987081640' app/views/events/new.html.erb:5:in_app_views_events_new_html_erb__1569841425540097418_70204987081640 '

erb: 14 - это строка №3 выше, а erb: 5 -

<%= form_for @event do |form| %>

person Serendipity    schedule 25.05.2015    source источник


Ответы (2)


Сообщение об ошибке выдает options_from_collection_for_select([{1 => 'Food'}, {2 => 'Entertainment'}])

[{1 => 'Food'}, {2 => 'Entertainment'}] - это массив, который передается как один аргумент методу options_from_collection_for_select; отсюда и сообщение об ошибке.

Правильная форма вызова вспомогательного метода options_from_collection_for_select:

options_from_collection_for_select(collection, value_method, text_method, selected = nil)

Дополнительные сведения и примеры использования см. На странице http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_from_collection_for_select

person Prakash Murthy    schedule 25.05.2015

Я думаю, вам лучше использовать options_for_select, который будет работать с указанными вами аргументами и просто заменит options_from_collection_for_select в вашем коде. Документацию по которому можно найти здесь.

Вам нужно решить, хотите ли вы, чтобы число (1, 2 и т. Д.) Или слово (еда, развлечения и т. Д.) Было «значением», которое достигает вашей серверной части. Например:

options_for_select({'Food' => 1, 'Entertainment' => 2})

Результат вышеизложенного в HTML будет следующим:

<option value="1">Food</option>
<option value="2">Entertainment</option>

Для метода options_from_collection_for_select требуется 3 аргумента. Вы предоставили только один: [{1 => 'Food'}, {2 => 'Entertainment'}]. Ваш второй аргумент должен быть методом / атрибутом для каждого объекта в коллекции, который представляет «значение», третий должен быть меткой для этого значения.

person Jimmy Thompson    schedule 25.05.2015