Ruby on Rails — redirect_to

У меня возникли проблемы с пониманием инструкции redirect_to. У меня есть модель "Книга" (с логическим атрибутом "чтение") и контроллер "книги". Теперь я создал второй контроллер «Админы», имеющий методы: index и change. Представление индекса просто отображает список всех книг со ссылкой на метод изменения:

<% @Books.each do |d| %>
<%= d.title %><br>
<% if d.read==true %>
<%= link_to "mark unread", change_path(:id=>d.id)%>
<% else %>
<%= link_to "mark read", change_path(:id=>d.id)%>
<%end %>

Теперь метод изменения просто изменяет атрибут «чтение»:

@book=Book.find(params[:id])
if @book.read==true
@book.update_attributes(:read => false)
else
@book.update_attributes(:read => true)
end
redirect_to action: "index"

Проблема в том, что rails пытается перенаправить меня на действие show, используя :id в качестве параметра... (возможно, потому, что change_url — это /admins/change?id=3) Но я просто хочу, чтобы меня перенаправили обратно в представление index "/ администраторы"

есть способ? похоже, что рельсы всегда пытаются перенаправить на действие просмотра, если в качестве параметра есть идентификатор

Большое спасибо

PS: route.rb содержит ресурсы:админы и ресурсы:книги


person Sven    schedule 06.04.2014    source источник
comment
Откуда вы знаете, что rails tries to redirect me to the show action using the :id as a parameter? Вы получаете какую-либо ошибку? Если да, поделитесь журналом сервера, созданным для него.   -  person Kirti Thorat    schedule 06.04.2014


Ответы (3)


Использовать это

redirect_to :controller => 'admins', :action => 'index'

Or

redirect_to admins_url

Вышеупомянутые два направят вас на index страницу AdminsController. Rails никоим образом не направит его к действию show, ЕСЛИ ТОЛЬКО вы не перенаправляете действие show из действия index AdminsController. Поскольку вы не предоставили index код действия AdminsController, я бы порекомендовал вам проверить там.

person Kirti Thorat    schedule 06.04.2014

Если вы хотите получить четкое объяснение redirect_to... checkout

https://gist.github.com/jcasimir/1210155

person Ryan-Neal Mes    schedule 06.04.2014

У меня была похожая проблема несколько дней назад. Я бы предложил сделать это в форме, где вы перечисляете книги и ставите/снимаете флажки.

<%= form_for @book,:url => book_index_path do |f| %>

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

person frankfurt-laravel    schedule 07.04.2014