2014-04-06 130 views
1

我在理解redirect_to语句时遇到了一些麻烦。 我有一个模型“书”(与布尔属性“读”)和一个控制器“书”。现在我创建了第二个控制器“管理员”,但不得不使用索引和更改。 索引视图只是呈现一个列表关闭所有书籍的链接,以改变方法:Ruby on Rails - redirect_to

<% @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" 

的问题是:铁轨尝试使用:id作为参数将我重定向到show动作...(可能是因为change_url是/ admins/change?id = 3) 但我只是想要回到索引视图“/ admins”

有没有办法?好像轨总是试图重定向到视图操作,如果有一个ID作为参数

非常感谢

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

+0

你怎么知道'rails试图使用:id作为参数将我重定向到show动作?你有什么错误吗?如果是,请分享为此生成的服务器日志。 –

回答

1

使用此

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

或者

redirect_to admins_url 

以上两个将引导您到index页的AdminsController。 Rails无法将其路由至show操作,除非您将操作从index操作转入AdminsController。因为,你没有分享index行动代码AdminsController,我会建议你去那里查询。

0

前几天我有一种类似的问题。我建议在列出书籍和标记/取消标记复选框的形式下执行此操作。

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

这个工作对我很好,当我设置在其中创建数据的网站,用户将被立即转移到同一个页面(包括成功/错误消息)..做一种 人批量处理。