我有一个问题控制器和一个相关的模型和一些休息路线。以下是它在routes.rb中的设置方式:
resources :questions
我想添加一个自定义路由,其格式为/ questions / widget / ID(其中ID是我想要生成小部件的问题的ID)。我想通过我的问题控制器中的“小部件”操作来处理它。我尝试过很多东西,比如:
resources :questions do
member do
get 'widget/:id'
end
end
但没有任何效果。我确定我错过了一些简单的事情。有任何想法吗?提前谢谢。
答案 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