Ruby on Rails - redirect_to

时间:2014-04-06 15:01:48

标签: ruby-on-rails ruby-on-rails-3

我在理解redirect_to语句时遇到了一些麻烦。 我有一个模特" Book" (使用布尔属性"读取")和控制器"书籍"。现在我创建了第二个控制器" Admins"不得不采用方法:索引和改变。 索引视图只显示所有Books的列表,其中包含指向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 %>

现在改变方法只是更改&#34;读取&#34;属性:

@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尝试使用:id作为参数将我重定向到show动作...(可能是因为change_url是/ admins / change?id = 3) 但我只是想直接回到索引视图&#34; / admins&#34;

有办法吗?如果有一个id作为参数

,看起来rails总是试图重定向到视图操作

非常感谢

PS:routes.rb包含资源:管理员和资源:图书

4 个答案:

答案 0 :(得分:3)

如果您想要明确解释redirect_to ... checkout

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

答案 1 :(得分:3)

使用此

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

或者

redirect_to admins_url

上述两项内容将引导您转到index的{​​{1}}页面。除非您从AdminsController的{​​{1}}操作重定向到show操作,否则Rails无法将其路由到show操作。由于您没有共享index AdminsController行为代码,我建议您去那里查看。

答案 2 :(得分:1)

前几天我有类似的问题。我建议您在列出书籍和标记/取消标记复选框的表单中执行此操作。

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

这对我来说很好,当我设置一个你创建数据的网站,并立即将用户重定向到同一页面(包括成功/错误消息)..做一种 人工批处理。

答案 3 :(得分:0)

redirect_to并非如此工作 - 您必须尝试redirect_to books_path或您要重定向的实际路径路径功能。

在文档中还有更多信息,但要点是redirect_to action: "index"实际上并没有在index操作中运行任何代码。

http://guides.rubyonrails.org/layouts_and_rendering.html#using-redirect-to