如何访问通过命名路由传递的对象

时间:2013-02-14 16:03:54

标签: ruby-on-rails

我是一个新手,并且看起来像是一个简单/基本的轨道问题。

我有一个链接,我试图传递有关该对象的信息:

<% for author in @book.authors %>
  <%= link_to "compute", special_book_path(author) %>

如何在控制器中访问“author”对象(通过特殊命名路由传递)?

我试过了:

@author = @book.authors.find(params[:author])

但得到了“无法找到没有ID的作者”错误。

编辑:解决方案

special_book_path(author_id: author.id)

控制器

params[:author_id]

2 个答案:

答案 0 :(得分:2)

当您设置命名路由时,设置请求参数名称(通常为:id),当您使用special_book_path(author)时,此参数的值设置为author.to_param默认author.send(author.class.primary_key)通常是author.id,所以可能只是

@author = Author.find(params[:id])

将起作用

答案 1 :(得分:2)

  <%= link_to "compute", special_book_path(author: author) %>

这只会传递作者的id而不是作者对象。并且你不能在路线中传递物体。

在控制器中,您可以以params [:author]

的形式访问传递的参数
  @author = @book.authors.find(params[:author])