2013-02-14 54 views
1

我是一个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] 
+0

我不知道你是如何在你的控制器代码中设置@book如果路线有书没有资料。只有一本特别的书吗? – 2013-02-14 16:52:27

+0

上面的代码只是一个例子,因为实际代码更复杂,更难以阅读。 – 2013-02-14 18:01:38

回答

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

这将通过只是笔者并非笔者对象的ID。而且你不能传递路由中的对象。

在控制器,你可以访问传递的参数为PARAMS [:作者]

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

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

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

将工作