如何访问通过命名路由传递的对象
问题描述:
我是一个rails新手,并有什么似乎是一个微不足道的/基本的轨道问题。如何访问通过命名路由传递的对象
我有我正努力通过关于对象的信息的链接:
<% for author in @book.authors %>
<%= link_to "compute", special_book_path(author) %>
我怎样才能在控制器访问(这是通过特殊命名的路由传递)“作者”的对象?
我想:
@author = @book.authors.find(params[:author])
,但有一个 “找不到没有ID作者” 的错误。
编辑:解
special_book_path(author_id: author.id)
控制器
params[:author_id]
答
<%= link_to "compute", special_book_path(author: author) %>
这将通过只是笔者并非笔者对象的ID。而且你不能传递路由中的对象。
在控制器,你可以访问传递的参数为PARAMS [:作者]
@author = @book.authors.find(params[:author])
答
当您设置命名的路由,您可以设置一个请求参数的名称,通常:id
,当您使用special_book_path(author)
,这个参数的时值设置为author.to_param
,默认为author.send(author.class.primary_key)
,通常为author.id
,因此可能只是
@author = Author.find(params[:id])
将工作
我不知道你是如何在你的控制器代码中设置@book如果路线有书没有资料。只有一本特别的书吗? – 2013-02-14 16:52:27
上面的代码只是一个例子,因为实际代码更复杂,更难以阅读。 – 2013-02-14 18:01:38