我有一个典型的one_to_many关系中的两个模型:Books
和pages
。
如何制作以下内容
page_path(@page)
输出此路径:
bookname/page/pageid
而不是
page/pageid
如果我覆盖to_param,我所能做的就是制作一条像localhost/page/bookid/pageid
这样的路径,但这不是我想要的。
答案 0 :(得分:2)
不确定是否可以准确地获得您想要的内容,但您可以将这个页面设为嵌套资源,如下所示:
resources :books do
resources :pages
end
然后你会得到:
localhost/book/bookid/page/pageid
然后你可以覆盖`to_param'来得到:
localhost/book/bookid-bookname/page/pageid
答案 1 :(得分:1)
我假设您的路径为/:book_name / page /:id
在routes.rb中:
match '/:book_name/page/:id' => "page#show", :as => :page
在控制器中,您将访问params [:id]以获取page.id和params [:book_name]以获取该书的名称。
答案 2 :(得分:0)
我发现要完全控制路径助手,您必须覆盖application_helper.erb
文件中的那些。以下代码对我有用:
def pages_path(@page)
@bookpath = Book.find(@page.book_id)
@bookpath + '/page/' + @page.id
end
帮助程序仅创建路径。您仍需要将其链接到routes.rb
中的特定操作。您甚至可以将pages
资源嵌套在books
资源中。唯一重要的是上面帮助程序生成的路径必须能够被rails应用程序识别。