Вложенные формы Ruby on Rails - недопустимые параметры: users_attributes
При попытке добавить пользователей в группу, используя гем nested_form, я не могу получить доступ к пользователям из параметров. После некоторого расследования я заметил, что я получаю ошибку недопустимых параметров в консоли. Мне нужно получить доступ к users_attributes, чтобы я мог искать пользователей в моей базе данных по отображаемому имени в контроллере. (Таким образом, nested_form должен добавить пользователей, которые уже находятся в базе данных, если есть лучший способ сделать это, пожалуйста, дайте мне знать)
Вот ошибка с консоли рельсов:
Запущен PATCH "/band_steps/videos" для 127.0.0.1 в 2015-04-29 01:59:03 -0400 Обработка BandStepsController# обновляется как параметры HTML: {"utf8"=>"✓", "authenticity_token"=>"oA16RrnTw9Tn/7n45jSjrg+Q6vO8q+TxrYRHLOKSJYs=", "band"=>{"users_attributes"=>{"0"=>{"display_name"=>"Tyler", "_destroy"=>"false", "id"=>"330"}}}, "commit"=>"Next", "id"=>"videos"} Загрузка полосы (0,2 мс) ВЫБРАТЬ "bands".* FROM "band " WHERE "bands"."Id" = $1 LIMIT 1 [["id", 57]] Недопустимые параметры: users_attributes (0,1 мс). Начальная полоса существует (0,5 мс). Выберите 1 как один из "диапазонов", ГДЕ (LOWER("band". "Name") = LOWER('asdfsbad') И "band"."id"!= 57) LIMIT 1 (0,2 мс) COMMIT Перенаправлено на http://localhost:3000/band_steps/music Завершено 302 Найдено за 8 мс (ActiveRecord: 1,0 мс)
Код для частичной формы (_form.html.erb):
<%= nested_form_for @band, url: wizard_path do |band_form| %>
<%= render partial: 'shared/error_messages', locals: {obj: band_form.object} %>
<%= yield band_form %>
<%= band_form.submit "Next" %>
<%end%>
Код из member.html.erb (страница, которая вызывает частичное)
<h3> Add members to your band! </h3>
<%= render layout: 'form' do |band_form| %>
<%= band_form.fields_for :users do |builder| %>
<%= render 'user_fields', builder:builder %>
<%end%>
<p><%= band_form.link_to_add "Add a Member", :users %></p>
<br>
<%end%>
<%= link_to "skip this step", next_wizard_path %><br>
<%= link_to "Back", previous_wizard_path %>
Код из _user_fields.html.erb (частично, который отображает пользовательские поля)
<p>
<%= builder.label :display_name, "Display Name" %>
<%= builder.text_field :display_name %>
<%= builder.link_to_remove "Remove this User" %>
</p>
Соответствующий код контроллера полосы: (я публикую только те методы, которые непосредственно задействованы для экономии времени на чтение, я могу опубликовать весь код по мере необходимости)
Метод создания:
def create
@band = Band.new(band_params)
@band_params = band_params
if @band.save
session[:band_id] = @band.id
redirect_to band_steps_path
else
render :new
end
end
сильные параметры:
def band_params
params.require(:band).permit(:name, :location, :about_me, :profile_picture,
:full_address, :video_link, user_ids: [], genre_ids: [],
band_video_attributes: [:video_link, :video_name],
band_music_attributes: [:name, :embed_html],
genre_ids: [], users_attributes: [])
end
Модель Band:
has_many :user_bands, dependent: :destroy
has_many :users, through: :user_bands
accepts_nested_attributes_for :users, allow_destroy: true
Модель пользователя:
has_many :user_bands
has_many :bands, through: :user_bands
Подводя итог, как должен работать код: Форма группы имеет поля для ввода отображаемых имен пользователей, я имею доступ к отображаемым именам в контроллере диапазонов.
Я потратил довольно много времени, просматривая свой код, чтобы увидеть, где я допустил ошибку. Любая помощь приветствуется.