2015-03-06 1 views
0

Я сделал свой вид:Rails, форма вызов неправильного действия

 <tbody> 
     <% @player.bases.each do |basis| %> 
     <td><%= basis.id %></td> 
     <td><%= image_tag(basis.image_url(:thumb), class: 'thumbnail') %></td> 
     <td><%= link_to basis.name, basis %></td> 
     <td><%= basis.cost %></td> 
     <td><%= basis.short_info %></td> 
     <td> 
      <%= form_for @player, url: {:controller => 'players', :action => :remove_detail} do |f| %> 
       <%= f.hidden_field :type, :value => 'basis' %> 
       <%= f.hidden_field :detail_id, :value => basis.id %> 
       <%= f.submit 'Remove',class: 'btn btn-danger' %> 
      <% end %> 
     </td> 
     <% end %> 
     </tbody> 

В моих маршрутах, я прибавил:

resources :players do 
collection do 
    get 'search' 
    post 'remove_detail' 
end 
end 

У меня есть remove_detail в моем players_controller.rb, и я добавил это действие до before_action, чтобы получить текущего игрока. Однако, когда я нажимаю на кнопку «Удалить», она выдает мне ошибку и пытается запустить действие моего контроллера. update. Зачем?

Мои before_action:

before_action :set_player, only: [:show, :edit, :update, :destroy, :remove_detail] 

Мои remove_detail:

def remove_detail 
type = params['type'] 
id = params['detail_id'] 

if type == 'basis' 
    basis = Basis.find(id) 
    name = basis.name 
    @player.bases.delete(basis) 

end 

redirect_to @player, notice: "#{name} detail is removed" 

end 
+0

Не могли бы вы разместить весь свой шаблон? И если предоставленный вариант является частичным, не могли бы вы добавить частичное преобразование шаблона? –

ответ

1

Чтобы исправить это, попробуйте следующее:

Прежде всего, я бы пересмотреть свои маршруты следующим образом:

resources :players do 
    member do 
    delete 'remove_detail' 
    end 

    collection do 
    get 'search' 
    end 
end 

Это будет генерировать надлежащего URL для удаления detail для «единого Player»:

/players/:id/remove_detail 

Из REST-у природы Rails, мы определили URL, чтобы быть доступным при выполнении delete запроса.

Ваше изменение формы соответственно:

<%= form_for @player, { url: { action: "remove_detail" }, method: :delete } do |f| %> 

Изменение ваших маршрутов использовать метод delete больше держать конвенцию Rails. Post заставит ваше приложение работать, но - его просто Rails-y путь.

Удачи вам!

+0

Теперь он выдает мне сообщение об ошибке и пытается запустить действие 'destroy' моего контроллера –

+0

Обновление ответа ... Всего в секунду ... –

+0

@ Mr.D, вы правы - я поставил код из головы и сделал ошибку - проверьте обновленный фрагмент для 'form_for'. Извините за недопонимание! –