2

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

resources :questions 

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

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

但没有任何工作。我确定我错过了一些简单的东西。有任何想法吗?提前致谢。

4

3 回答 3

5

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

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

您可以从Rails 指南中获得更多信息。请参阅第 2.9.1 节。

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

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

但是,我会坚持惯例。

于 2012-11-01T19:23:07.473 回答
1

我知道它很旧,但是想解决我在这里结束的另一个路由问题,可以按照您的要求进行操作,这是一个示例

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
于 2018-09-09T11:42:26.157 回答
0

你为什么不使用这条路线:

resources :questions  do
  resources :widgets
end

它将questions/:question_id/widgets/new为您创建路径,以便为具有特定问题 ID 的问题创建新的小部件。

于 2012-11-01T19:08:51.040 回答