rails自定义休息路由参数

时间:2012-11-01 19:01:30

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

我有一个问题控制器和一个相关的模型和一些休息路线。以下是它在routes.rb中的设置方式:

resources :questions 

我想添加一个自定义路由,其格式为/ questions / widget / ID(其中ID是我想要生成小部件的问题的ID)。我想通过我的问题控制器中的“小部件”操作来处理它。我尝试过很多东西,比如:

resources :questions  do
   member do
      get 'widget/:id'
   end
end

但没有任何效果。我确定我错过了一些简单的事情。有任何想法吗?提前谢谢。

3 个答案:

答案 0 :(得分:4)

您不必指定ID,因为您在资源内部。它应该看起来像:

resources :questions  do
   member do
      get 'widget'
   end
end

您可以从Rails Guide获取更多信息。请参阅第2.9.1节。

编辑:我刚注意到您正在尝试匹配get / questions / widget /:id。这将为get / questions /:id / widget设置路由。这更符合Rails惯例。如果您真的想要另一种方式,则需要设置自定义匹配语句:

match "/questions/widget/:id" => "questions#widget"

但是,我会坚持惯例。

答案 1 :(得分:0)

为什么不使用这条路线:

resources :questions  do
  resources :widgets
end

它会创建questions/:question_id/widgets/new之类的路径,为您创建具有特定问题ID的问题的新窗口小部件。

答案 2 :(得分:0)

我知道它已经很老了,但是想要解决我在这里结束的另一个路由问题,有可能按照您的要求做,这是一个例子

resources :articles do
  get 'by_tag/:tag' => :by_tag, on: :collection
  get 'by_author/:author' => :by_author, on: :collection
  resources :comments, except: :show
end

现在您拥有/ artices / by_tag /:tag。诀窍是使用on:collection。 显然不要忘记添加by_tag操作和by_author。

class ArticlesController < ApplicationController
.....
    def by_tag
    ...
    end
end

检查此路线是否适用

melardev@local~$ rails routes