我是一个新手,并且看起来像是一个简单/基本的轨道问题。
我有一个链接,我试图传递有关该对象的信息:
<% 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]
答案 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])