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

Ruby on rails 如何访问通过命名路由传递的对象,ruby-on-rails,Ruby On Rails,我是一个rails新手,有一个看似微不足道/基本的rails问题 我有一个链接,试图在其中传递有关对象的信息: <% for author in @book.authors %> <%= link_to "compute", special_book_path(author) %> 但是出现了“没有ID就找不到作者”的错误 编辑:解决方案 special_book_path(author_id: author.id) 控制器 params[:author_id]

我是一个rails新手,有一个看似微不足道/基本的rails问题

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

<% for author in @book.authors %>
  <%= link_to "compute", special_book_path(author) %>
但是出现了“没有ID就找不到作者”的错误

编辑:解决方案

special_book_path(author_id: author.id)
控制器

params[:author_id]

当您设置命名路由时,您设置一个请求参数名称,通常是
:id
,当您使用
特殊书籍路径(author)
时,此参数的值设置为
author.to.\u param
,默认情况下是
author.send(author.class.primary_键)
,通常是
author.id
,因此可能只是

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

将起作用

当您设置命名路由时,您设置请求参数名称,通常是
:id
,当您使用
特殊路径(author)
时,此参数的值设置为
author.to.\u param
,默认情况下是
author.send(author.class.primary_key)
,通常是
author.id
,所以可能很简单

@author = Author.find(params[:id])
  <%= link_to "compute", special_book_path(author: author) %>

将起作用

我想知道如果路线上没有关于book的信息,您如何在控制器代码中设置@book。只有一本特殊的书吗?上面的代码只是一个说明,因为实际的代码更复杂,更难阅读。我想知道如果路线没有关于书的信息,你如何在控制器代码中设置@book。只有一本特别的书吗?上面的代码只是一个例子,因为实际的代码更复杂,更难阅读。
  <%= link_to "compute", special_book_path(author: author) %>