【问题标题】:Adding a second 'new' action to a resource's routes向资源的路线添加第二个“新”操作
【发布时间】:2012-06-19 14:03:53
【问题描述】:

我需要向名为Things 的资源添加第二个“新”操作(称为*different_new*)。我希望它解决:

things/different_new

我在我的 *things_controller.rb* 上定义了一个 different_new 操作

rails guide to routing 之后,我看到了这个添加自定义操作作为路由的示例:

resources :photos do
  member do
    get 'preview'
  end
end

但是,像这样添加的任何操作都会添加到特定资源中。例如,上面会导致这样的路由:

照片/:photo_id/预览

所以这对我不起作用,因为我希望该操作位于创建新资源的位置,而不是针对已创建资源的操作。

我该如何解决这个问题?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 routing routes action


    【解决方案1】:

    和member类似,还有一个收藏选项:

    resources :photos do
      collection do
        get 'preview'
      end
    end
    

    或者对于您的情况:

    resources :things do
      collection do
        get 'different_new'
      end
    end
    

    这在轨道布线指南的第 2.9.2 节中有所描述。

    【讨论】:

    • 完美。我阅读了第 2.9.2 节,但根本没有建立联系。现在它已经点击了。谢谢。
    【解决方案2】:

    新操作(在这种情况下是您的different_new 操作)与任何现有资源都没有关联,因此它应该是一个收集路线:

    resources :things do
      get :different_new, :on => :collection
    end
    

    它会生成类似things/different_new 的路径。不过,与预定义的 new 不同,操作 url 助手将是复数 - different_new_things_path

    【讨论】:

    • 这也可以。我认为约定是,一旦你有多个获取集合的路径,你应该使用集合 do ... end 语法。
    • 当然可以,但是在这种情况下只有一条路线,所以我使用了:on => :collection
    • KL-7,我只是指出了惯例,所以如果以后有人读到这个,他们就知道该做什么了。
    猜你喜欢
    • 2014-02-18
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2021-08-12
    • 2021-04-13
    相关资源
    最近更新 更多