首页 > 解决方案 > 来自自己的控制器方法的嵌套资源 - 或创建全新的控制器?

问题描述

问题:当用户(登录时)创建订单时,它们会被发送到 OrderControllers 显示页面,该页面只有在买卖双方都登录时才能访问。从这里他们可以编辑/更新他们的订单等。

我们还有guest_user一个未登录的人,对于他们,我需要在浏览器中确认订单(我正在使用 Devise gem)

我创建了一个方法:

def order_confirmation

在订单控制器中。

虽然,我怎样才能将它嵌套在订单中,以便页面知道要显示哪个订单。

这是否可以在它自己的控制器下嵌套方法,或者我应该只为订单确认创建一个小控制器?

例如:example.com/orders/1/order-confirmation

除了嵌套和创建控制器之外,也许还有更好的方法来解决这个问题?

我试过

  resources :orders do
    collection do
      get 'order_confirmation'
    end
  end

  def order_confirmation
    @order = Order.all.find(params[:id])
  end

但它不会像我想要的那样工作。

耙子路线给了我

order_confirmation_orders GET    /orders/order_confirmation(.:format)

我怎样才能得到?

order_order_confirmation_orders GET    /orders/id/order_confirmation(.:format)

标签: ruby-on-railsruby

解决方案


我能够从这个 SO 帖子的帮助中弄清楚这一点:

Rails:自定义嵌套控制器动作

通过使用:

resources :orders do
  get 'order_confirmation', :on => :member
end

这将创建:

 order_confirmation_order GET    /orders/:id/order_confirmation(.:format)                                                 orders#order_confirmation

推荐阅读