【问题标题】:Nested resources sharing same controller嵌套资源共享同一个控制器
【发布时间】:2014-09-01 19:02:12
【问题描述】:

在我的应用程序中,我想让它可以管理产品或卖家本身的卖家佣金,所以我的路线如下所示:

resources :sellers do  
  resources :commissions  
end

resources :products do
  resources :commissions
end

我的网址会是这样的:

/products/:product_id/commissions/:id(.:format)
/sellers/:seller_id/commissions(.:format)

但是,我如何在 CommissionsController 中知道请求来自产品或卖家的时间,以便我可以根据 product_id 或 Seller_id 设置佣金?

感谢您的建议

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    你可以试试:

    resources :sellers, model: 'Seller' do  
      resources :commissions  
    end
    
    resources :products, model: 'Products' do
      resources :commissions
    end
    

    然后在控制器中获取modelid 类似这样:

    model = params[:model].constantize
    id = params[params[:model].foreign_key]
    

    【讨论】:

      【解决方案2】:

      您可以只检查params[:product_id]params[:seller_id] 是否存在:

      #app/controllers/commissions_controller.rb
      class CommissionsController < ApplicationController
         before_action :set_model
      
         def index
            @commissions = @model.find @id
         end
      
         private
      
         def set_model
             case true
              when params[:seller_id]
                model = "Seller"
              when params[:product_id]
                model = "Product"
            end
            @model = model.constantize
            @id = model
         end
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-20
        相关资源
        最近更新 更多