2013-07-10 2 views
8

Это мой первый проект в rails, который должен создать таблицу, в которой будут храниться данные об играх. Я могу отображать данные из таблицы о баллах победителей, счете неудачника и т. Д. Однако у меня есть проблемы со столбцом таблицы, который содержит ссылки для удаления для каждой игры.Проблема в rails 4.0 с созданием link_to для действия удаления

Вот мой код в контроллер игры для удаления метода:

def delete 
    @game = Game.find(params[:game]) 
    @game.destroy() 
    redirect_to :action => 'index' 
end 

Фрагмент моей таблицы кода, который включает в себя линию для команды link_to

<% @games_items.each do |t| %> 
    <tr> 
     <td><%= t.winner.name %></td> 
     <td><%= t.loser.name %></td> 
     <td><%= t.challenger.name %></td> 
     <td><%= t.winner_score %></td> 
     <td><%= t.loser_score %></td> 
     <td><%= link_to 'Delete', delete_game_path(id: t.id)%></td> 
    </tr> 
    <% end %> 

В маршрутах файл я

resources :games 

Который, насколько мне известно, помогает генерировать базовую маршрутизацию. Может ли кто-нибудь помочь мне понять, почему моя link_to не работает?

ответ

17

Если вы используете (что рекомендуется) resources: a) Ваше действие по удалению записей должно быть названо destroy. б) Игра ищется с :id параметра:

def destroy 
    @game = Game.find(params[:id]) 
    @game.destroy 
    redirect_to :action => 'index' 
end 

с) Ваша ссылка должна быть:

<%= link_to 'Delete', t, method: :delete %> 

поскольку путь такой же, как и для show действия, только Thig, что изменения в HTTP.

+0

Куда я должен смотреть, чтобы увидеть, как будут называться мои действия? Это содержится в методе рейковых маршрутов? –

+0

@MichaelLiu да, выход задачи «rake routes» содержит соответствующие имена действий. –

+0

@MarekLipka У меня такая же проблема, но я не могу заставить метод ': delete' работать. Независимо от того, что я делаю, это приводит к запросу 'get'. Любые идеи почему? '<% = link_to (" Удалить! ", {: controller => 'projects',: action => 'destroy',: id => project.hashed_id}, {method:: delete})%> ' – emersonthis

6

Формат для удаления вызова:

<%= link_to 'Delete', game_path(t.id), :method => :delete %> 

rake routes использовать, чтобы узнать о доступных маршрутах, в том числе сгенерированных маршрутов хелперов и обрабатывающего запрос на контроллер/действие.

+0

Большое спасибо, это на самом деле то, что я хочу. :) –

5

У меня была аналогичная проблема на рельсах 4.2.1, даже с помощью метода: method =>: delete по ссылке_и до сих пор маршрутизирует метод show.

Но используя метод button_to, как показано ниже, работает!

<%= button_to "delete", article_path(:id => article.id), :method => :delete %> 

button_to создает форму вокруг кнопки, а затем сообщения для удаления, метода, добавив скрытое поле с именем _method со значением delete рельсов использует это, чтобы маршрут к способу уничтожения в контроллере.

+0

У меня была такая же проблема, когда 'link_to' не работал с' method:: delete', но решил ее, добавив 'jquery_ujs' в свой application.js https://stackoverflow.com/a/23331608/4249632 – Ryan

0

Попробуйте использовать <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> перед тем <%= javascript_include_tag "application" %> в макете, а также удалить

//= require jquery 

линии в вашем application.js. Это было для меня. Не знаю, почему это не сработало с оригинальным файлом jquery.js rails.

Смежные вопросы