13

我有两个控制器,即 1)carts_controller 2)orders_controller

class CartsController < ApplicationController
  helper_method :method3

  def method1
  end

  def method2
  end

  def method3
    # using method1 and method2
  end
end

注意:method3正在使用method1method2CartsControllershowcart.html.erb使用method3的视图并且工作正常。

现在从订单的角度来看,我需要显示购物车(showcart.html.erb),但由于method3定义了帮助程序,carts_controller因此它无法访问它。

如何解决?

4

1 回答 1

46

由于您使用的是 Rails 4(这种方法也适用于较新版本的 Rails),在控制器之间共享代码的推荐方法是使用 Controller Concerns。控制器关注点是可以混合到控制器中以在它们之间共享代码的模块。因此,您应该将常用的辅助方法放在控制器关注点中,并将关注模块包含在您需要使用辅助方法的所有控制器中。

在您的情况下,由于您想method3在两个控制器之间共享,您应该把它放在一个关注点。请参阅本教程以了解如何在控制器之间创建关注点和共享代码/方法。

这里有一些代码可以帮助你开始:

定义您的控制器关注点:

# app/controllers/concerns/your_controller_concern.rb
module YourControllerConcern
  extend ActiveSupport::Concern

  included do
    helper_method :method3
  end

  def method3
    # method code here
  end
end

然后,在您的控制器中包含关注点:

class CartsController < ApplicationController
  include YourControllerConcern
  # rest of the controller codes
end

class OrdersController < ApplicationController
  include YourControllerConcern
  # rest of the controller codes
end

现在,您应该可以method3在两个控制器中使用。

于 2015-11-12T03:44:12.570 回答