Проблема в 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 не работает?


person Michael Liu    schedule 10.07.2013    source источник


Ответы (4)


Если вы используете (что рекомендуется) 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, меняется только метод HTTP.

person Marek Lipka    schedule 10.07.2013
comment
Где я должен посмотреть, как должны называться мои действия? Это содержится в методе rake route? - person Michael Liu; 10.07.2013
comment
@MichaelLiu да, выходные данные задачи rake routes содержат соответствующие имена действий. - person Marek Lipka; 10.07.2013
comment
@MarekLipka У меня точно такая же проблема, но я не могу заставить работать метод :delete. Что бы я ни делал, это приводит к запросу get. Есть идеи, почему? ` ‹%= link_to(Удалить!, {:controller=›'проекты', :action=›'destroy', :id=›project.hashed_id}, {метод: :delete} ) %› ` - person emersonthis; 17.08.2013
comment
@Emerson, твой JavaScript, вероятно, не работает. Проверьте консоль браузера на возможные ошибки JS. - person Marek Lipka; 17.08.2013

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

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

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

person boulder    schedule 10.07.2013
comment
Большое спасибо, это действительно то, что я хочу. :) - person Jigar Bhatt; 09.12.2015

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

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

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

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

person Kingsley Ijomah    schedule 21.04.2015
comment
У меня была такая же проблема, когда link_to не работал с method: :delete, но решил ее, добавив jquery_ujs в мой application.js stackoverflow.com/a /23331608/4249632 - person Ryan Hertz; 12.07.2017

Попробуйте использовать <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.

person Gediminas    schedule 16.01.2016