我在理解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包含资源:管理员和资源:图书
答案 0 :(得分:3)
如果您想要明确解释redirect_to ... checkout
答案 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