Мое приложение содержит форму, позволяющую пользователю выбирать объект Playground для работы. Выбор игровой площадки обновляет поле current_playground_id текущего пользователя. Основные элементы:
rout.rb
resources :users, :only=>[:new, :create, :edit, :update, :show, :index, :set_playground, :pass, :destroy] do
member do
patch :set_playground
get :pass
end
end
_header.html.erb
<% if user_signed_in? %>
<!-- playground selection form -->
<%= form_for(current_user, url: set_playground_user_path(current_user), method: :patch) do |f| %>
<ul>
<li><%= t('Playground') %>: <%= f.collection_select :current_playground_id, list_of_playgrounds, :id, :code %> </li>
<li class="actions" ><%= f.submit "OK" %></li>
</ul>
<% end %>
<% end %>
users_controller.rb
def set_playground
@user.updated_by = current_login
respond_to do |format|
if @user.update_attributes(user_params)
format.html { redirect_to root_path, notice: 'User switched playground.' }
else
format.html { redirect_to root_path, alert: 'Unable to switch playground.' }
end
end
end
Я хочу вызвать то же действие set_playground из индексного представления игровых площадок, чтобы пользователь мог выбрать с этой точки игровую площадку, с которой он хочет работать. Я добавил вызов button_to в индексном представлении игровых площадок:
<code><div class="row">
<div class="col-md-6">
<table class="table table-striped">
<% @playgrounds.each do |object| %>
<tr>
<td class="col_narrow"> <%= image_tag object.logo if object.logo.attached? %> </td>
<td class="col_narrow"> <%= link_to object.hierarchy, object %> </td>
<td class="col_narrow">
<%= object.translated_name %>
<%= button_to 'Select', [current_user, set_playground_user_path, object.id], method: :patch) %>
</td>
<td class="col_wide"> <pre> <%= object.translated_description %>
<% end%>
Я пробовал несколько синтаксисовоснованный на полиморфных методах urls или прямом вызове действия, но не смог найти правильный синтаксис для выполнения метода set_playground без генерации ошибки. В приведенном выше примере возвращается:
Не найдено ни одного маршрута {: action => "set_playground",: controller => "users"}, пропущены необходимые ключи: [: id]
Буду рад предложить решение для достижения этой цели! Большое спасибо!