У меня проблемы со следующим сценарием:
Мои пользователи выполняют поиск по ключевым словам, который создает список. У пользователя есть 2 действия: либо добавить их в таблицу избранного, либо заблокировать их с помощью флажков.
Моя проблема заключается в том, что когда пользователи нажимают «Добавить в избранное», форма передает список хэшей моему сильному методу params, и я не могу передать его правильно.
Я думаю, проблема в том, что хеш, требуемый strong_params, находится внутри другого хеша.
Также я понятия не имею, как передать тот же хеш в BlockController, когда пользователь нажимает «Блокировать».
Это сообщение об ошибке:
param is missing or the value is empty: {:favorites=>{:name=>"Jon Doe", :title=>"Provider", :company=>"Acme", :location=>"Dubai", :profile=>"Group A", :notes=>""}}
Мои результаты.html.erb
<table class="table table-striped table-bordered">
<tr>
<th class="center">Name</th>
<th class="center">Title</th>
<th class="center">Company</th>
<th class="center">Location</th>
<th class="center">Profile</th>
<th class="center">Select</th>
</tr>
<%= form_tag favorites_path do %>
<%= @results.length %>
<% @results.each do |key,value| %>
<tr>
<td><%= value['name'] %></td>
<td><%= value['title'] %></td>
<td><%= value['company'] %></td>
<td><%= value['location'] %></td>
<td><%= link_to 'Profile', value['profile'],:target => "_blank"%></td>
<td><%=check_box_tag 'favorite[]', {:name => value['name'],:title =>value['title'],:company => value['company'],:location => value['location'], :profile=> value['profile'], :notes =>""}%></td>
</tr>
<% end %>
<%= submit_tag "Add to Favorites", name: 'add', class: 'btn btn-primary' %>
<%= submit_tag "Block Profiles", name: 'block', class: 'btn btn-danger' %>
<% end %>
</table>
вот как выглядит мой метод strong_params:
def favorite_params
params[:profiles].each do |e|
params.require(e).permit(:name, :title, :company, :location, :profile, :notes)
end
end
Любые идеи?
Обновление:
Я могу передать параметры как:
def favorite_params
params.permit(:commit,favorite:[])
end
создать метод:
def create
@favorite = Favorite.new(favorite_params)
@favorite.user_id = current_user.id
respond_to do |format|
if @favorite.save
format.html { redirect_to @favorite, notice: 'Favorite was successfully created.' }
format.json { render :show, status: :created, location: @favorite }
format.js { render :show, status: :created, location: @favorite }
else
format.html { render :new }
format.json { render json: @favorite.errors, status: :unprocessable_entity }
end
end
end