2013-02-14 56 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]) 

將工作