我在理解redirect_to语句时遇到了一些麻烦。我有一个模型"Book"(带有布尔属性"read")和一个控制器"books"。现在我创建了第二个控制器"管理员",必须使用方法:索引和更改。索引视图只是呈现所有书籍的列表,其中包含指向更改方法的链接:
<% @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 %>
现在 change 方法只更改 "read" 属性:
@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)但我只想被引导回索引视图"/admins"
有办法吗? 似乎 Rails 总是尝试重定向到 View 操作,如果有 id 作为参数
多谢
PS:routes.rb 包含资源:管理员和资源:书籍
使用这个
redirect_to :controller => 'admins', :action => 'index'
或
redirect_to admins_url
以上两个将引导您进入AdminsController
的index
页面。除非您从AdminsController
的index
操作重定向到show
操作,否则 Rails 无法将其路由到show
操作。由于您没有共享index
操作代码 AdminsController
,我建议您在那里检查。
如果你想清楚地解释redirect_to...收款处
https://gist.github.com/jcasimir/1210155
前我遇到了类似的问题。我建议在您列出书籍和标记/取消标记复选框的表单中执行此操作。
<%= form_for @book,:url => book_index_path do |f| %>
这对我来说效果很好,当我设置一个您创建数据的网站并且用户立即被重定向到同一页面(包括成功/错误消息)时。人工批处理。