【问题标题】:How do I change to use the same route :id as update instead of :model_id?如何更改以使用相同的路由:id 作为更新而不是:model_id?
【发布时间】:2017-06-28 03:54:08
【问题描述】:

我有这些路线

  resources :brokers do
    patch :approve
rake routes
        broker_approve PATCH  /brokers/:broker_id/approve(.:format)       brokers#approve
                       PATCH  /brokers/:id(.:format)                      brokers#update

网址是http://localhost:3000/brokers/1/approve

报错

找不到具有 'id'= 的代理

加载代理的控制器是

def set_broker
  @broker = Broker.find(params[:id])

参数是

{"_method"=>"patch", "authenticity_token"=>"O8jztBqgRPcepes/p6IQqTfUQ==", "broker_id"=>"1"}

我怎样才能像#update那样使用路径/brokers/:id/approve,以便它可以使用相同的方法来加载模型?

指南:http://guides.rubyonrails.org/routing.html#nested-resources

【问题讨论】:

    标签: ruby-on-rails routes ruby-on-rails-5 nested-routes


    【解决方案1】:

    你可以通过更新你的路线来做到这一点

    resources :brokers do
        member do
          patch :approve
        end
    end
    

    这会将嵌套路由视为成员路由。这将创建如下路线:

    approve_broker PATCH  /brokers/:id/approve(.:format) brokers#approve
    

    【讨论】:

      【解决方案2】:

      我用过

        resources :brokers do
          patch :approve, on: :member
      

      产量

      >rake routes | grep approve
                  approve_broker PATCH  /brokers/:id/approve(.:format)              brokers#approve
      

      我不得不改变路径,但这很好。

      http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

      【讨论】:

        猜你喜欢
        • 2018-10-01
        • 2017-12-07
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-20
        • 2018-09-09
        相关资源
        最近更新 更多