1

我有两个模型:Books并且pages是典型的 one_to_many 关系。

我怎样才能使以下

page_path(@page)

输出此路径:

bookname/page/pageid

代替

page/pageid

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

4

3 回答 3

2

不确定是否可以获得您想要的内容,但您可以将 Page 设置为 book 下的嵌套资源,如下所示:

resources :books do
  resources :pages
end

然后你会得到:

localhost/book/bookid/page/pageid

然后你可以覆盖 `to_param' 来获得:

localhost/book/bookid-bookname/page/pageid

于 2012-11-20T15:58:08.560 回答
1

我假设您的意思是路径为 /:book_name/page/:id

在 routes.rb 中:

match '/:book_name/page/:id' => "page#show", :as => :page

在控制器中,您将访问 params[:id] 以获取 page.id 和 params[:book_name] 以获取书名。

于 2012-11-20T16:09:18.577 回答
0

我发现要完全控制路径助手,您必须覆盖application_helper.erb文件中的那些。以下代码对我有用:

def pages_path(@page)
  @bookpath = Book.find(@page.book_id)
  @bookpath + '/page/' + @page.id
end

助手只创建路径。您仍然需要将其链接到routes.rb. 您甚至可以将pages资源嵌套在books资源中。唯一重要的是,上述助手生成的路径必须能够被 rails 应用程序识别。

于 2012-11-20T17:24:57.760 回答