限制资源路由并在Rails 3中添加其他非RESTful路由

sea*_*ugh 9 ruby routes ruby-on-rails

我无法在这里或其他任何地方找到限制资源路由和在Rails 3中添加其他非RESTful路由的任何内容.这可能非常简单,但我遇到的每个示例或解释只针对一个案例而不是两者都在同一时间.

这是我在Rails 2中所做的一个例子:

map.resources :sessions, :only => [:new, :create, :destroy], :member => {:recovery => :get}

非常简单,我们只需要7个RESTful路由中的3个,因为其他路由对此资源没有任何意义,但我们还想添加另一个用于帐户恢复的路由.

现在从我收集的内容来看,这些事情中的任何一个都非常简单:

resources :sessions, :only => [:new, :create, :destroy]

就像在Rails 2中一样.并且:

resources :sessions do
  member do
    get :recovery
  end
end
Run Code Online (Sandbox Code Playgroud)

那么,我如何将这两者结合起来呢?我还可以使用旧的Rails 2方式吗?在Rails 3中有一种首选的方法吗?

cor*_*ard 17

您可以将参数和块传递给resources:

resources :sessions, :only => [:new, :create, :destroy] do
  get :recovery, :on => :member
end
Run Code Online (Sandbox Code Playgroud)

然后测试一下rake routes.


kla*_*eck 5

它应该像这样工作

resources :sessions, :only => [:new, :create, :destroy] do
  member do
    get :recovery
  end
end
Run Code Online (Sandbox Code Playgroud)

正如coreyward所提出的,还有一种更短的方式.

检查导轨导轨," 从外部进行导轨布线 ".我也可以推荐Obie Fernandez的"The Rails 3 Way",它在路由和RESt上有两个相当不错的章节.

干杯