Ruby on Rails-redirect_to

Sve*_*ven 3 ruby-on-rails ruby-on-rails-3

我在理解redirect_to语句时遇到了一些麻烦。我有一个模型“ Book”(具有布尔属性“ read”)和一个控制器“ books”。现在,我创建了第二个控制器“ Admins”,它必须具有以下方法:索引和更改。索引视图仅显示所有书籍的列表,并带有指向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 %>
Run Code Online (Sandbox Code Playgroud)

现在,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"
Run Code Online (Sandbox Code Playgroud)

问题是:rails尝试使用:id作为参数将我重定向到show动作...(也许是因为change_url是/ admins / change?id = 3),但是我只想直接返回索引视图“ /管理员”

有办法吗?如果有一个id作为参数,似乎rails总是尝试重定向到view操作

非常感谢

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

Rya*_*Mes 5

如果您想清楚地解释 redirect_to ... checkout

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


Kir*_*rat 5

用这个

redirect_to :controller => 'admins', :action => 'index'
Run Code Online (Sandbox Code Playgroud)

要么

redirect_to admins_url
Run Code Online (Sandbox Code Playgroud)

以上两项将引导您到的index页面AdminsControllershow除非您show要从的index操作重定向到操作,否则Rails不会将其路由到操作AdminsController。由于您没有共享的index操作代码AdminsController,因此建议您在此处进行检查。