Связь HABTM с сильными параметрами не сохраняет пользователя в Rails 4

Пользовательская модель:

has_and_belongs_to_many :events

Модель события:

has_and_belongs_to_many :users

Контроллер пользователей:

params.require(:user).permit(:role, {:event_ids => []})

Контроллер событий:

params.require(:event).permit(:subject, :location, :date, :time, :all_day, :reminder, :notes, {:users_ids => []})

Моя форма:

<%= simple_form_for(@event) do |f| %>
    <%= f.input :subject %>
    <%= f.input :location %>
    <%= f.input :date %>
    <%= f.input :time %>
    <%= f.association :users %>
    <%= f.input :all_day %>
    <%= f.input :reminder %>
    <%= f.input :notes %>

    <%= f.button :submit, :class =>"btn btn-default" %>
<% end %>

Я хочу иметь возможность выбрать пользователя из списка и сохранить этого пользователя в базе данных. Но я получаю следующее сообщение в своей консоли, когда пытаюсь создать новое событие:

Unpermitted parameters: user_ids

У меня неправильная установка? Я не передаю в форму правильные переменные экземпляра?


person Rav Johal    schedule 18.07.2014    source источник


Ответы (4)


Тьфу... подробности подробности!

Как это было раньше:

params.require(:event).permit(:subject, :location, :date, :time, :all_day, :reminder, :notes, {:users_ids => []})

Как это должно быть:

params.require(:event).permit(:subject, :location, :date, :time, :all_day, :reminder, :notes, {:user_ids => []})

Обратите внимание, что :users_ids на самом деле должно быть :user_ids!

person Rav Johal    schedule 18.07.2014
comment
Ха! Ты подтолкнул меня на это. - person Frans; 18.07.2014

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

params.require(:event).permit(:subject, :location, :date, :time, :all_day, :reminder, :notes, user_ids: [])

Примечание: user_ids: [] вместо {:user_ids => []}

person Ammar Shah    schedule 16.03.2016

Атрибут из simple_form: user_ids

Символ в #permit: users_id

Вы добавили букву s, удалите ее, и все будет хорошо, насколько я могу судить.

person Frans    schedule 18.07.2014

В моем случае раньше у меня была установка Rails 3. Я обновился до Rails 4. Выбор просто передал строку, а не ассоциацию. Таким образом, предложенный синтаксис не работал. Мне просто нужно было разрешить user_ids. То есть:

params.require(:event).permit(:subject, :location, :date, :time, :all_day, :reminder, :notes, :user_ids)

Кажется, Rails 4 изменил поведение.

person Hendrik    schedule 29.11.2016