铁轨中的自定义网址和路径

时间:2012-11-20 15:48:30

标签: ruby-on-rails ruby-on-rails-3

我有一个典型的one_to_many关系中的两个模型:Bookspages

如何制作以下内容

page_path(@page)

输出此路径:

bookname/page/pageid

而不是

page/pageid

如果我覆盖to_param,我所能做的就是制作一条像localhost/page/bookid/pageid这样的路径,但这不是我想要的。

3 个答案:

答案 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应用程序识别。