0

导轨 3.1。我有一张桌子places。它有一个名为的列type,其具有诸如caferestaurant等的值。每行只有一个值。

在我的路线中,我将资源定义为:

resources :places

网址是:

http://domain.com/places/123?type=cafe

我总是type在我的 URL 中附加 ,因为我使用它来确定要突出显示的导航菜单。

现在,我想创建一个更友好的 URL。如何创建读取以下任一内容的 URL:

1. http://domain.com/places/cafe/123
2. http://domain.com/cafe/123

非常感谢!

4

2 回答 2

2

有两种类型的路线 - 资源丰富的和非资源丰富的。听起来您正试图在两者之间进行混合。不幸的是,资源丰富的路由 URL 无法像您尝试做的那样自定义 via resources,但您可以添加其他路由以匹配您尝试创建的 URL。

为此,您必须创建非资源性路由,例如:

resources :places, :only => [:create, :update, :destroy]
match 'places/:type/:id' => 'places#show'
match 'places/:type' => 'places#index'
match 'places/:type/new' => 'places#new'
match 'places/:type/edit' => 'places#edit'

你不需要为创建、更新和销毁创建特殊的路由(尽管你可以)。无论如何,用户永远不会真正看到这些。只需将地点类型作为参数包含在表单中并删除链接,它就会在控制器中可用,就像它来自 URL 一样。

在控制器中,通过 访问类型params[:type]

于 2012-04-30T01:55:50.507 回答
1

为什么不使用@place.type, where 中存储的值@place = Place.find params[:id]来确定使用哪个导航?

于 2012-04-30T02:02:30.137 回答