Ruby on rails 保持控制器干燥:在哪里放置共享方法?

Ruby on rails 保持控制器干燥:在哪里放置共享方法?,ruby-on-rails,dry,Ruby On Rails,Dry,我的代码开始有重复项。。。。因为我不知道在哪里放置需要由(2)个不同控制器访问的方法/函数,为了快速启动它,我只是复制了它 所以我有一个用户控制器,一个页面控制器和帖子控制器 在用户页面上,我显示了帖子 在主页上,我还显示了帖子 我应该将共享/公共代码放在哪里,以便用户\u控制器、页面\u控制器和帖子\u控制器都可以访问这些方法 现在,我在一些控制器中复制了def方法,在每个控制器中也复制了一些私有方法 请注意,如何从另一个控制器访问在一个控制器中定义的方法 如果您的帖子显示在两个单独的页面上

我的代码开始有重复项。。。。因为我不知道在哪里放置需要由(2)个不同控制器访问的方法/函数,为了快速启动它,我只是复制了它

所以我有一个用户控制器,一个页面控制器和帖子控制器

在用户页面上,我显示了帖子

在主页上,我还显示了帖子

我应该将共享/公共代码放在哪里,以便用户\u控制器、页面\u控制器和帖子\u控制器都可以访问这些方法

现在,我在一些控制器中复制了def方法,在每个控制器中也复制了一些私有方法



请注意,如何从另一个控制器访问在一个控制器中定义的方法

如果您的帖子显示在两个单独的页面上,则使用部分页面。我不知道您使用的是什么版本的rails,但较新版本有一个用于共享部分的视图/应用程序文件夹

如果有一个方法在多个控制器之间共享,则将其放入应用程序控制器中。控制器是类,因此遵循所有正常规则

希望有帮助。

也许是一个模块

module ProductSharedMethods    
  def product_list
    Product.scoped
  end
end

class UsersController < ApplicationController
  include ProductSharedMethods

  def index
    @products = product_list
  end
end
模块产品共享方法
def产品目录
产品范围
结束
结束
类UsersController
如果这些方法相互依赖或密切相关,则第三种选择可能是使用单独的模块,并且更易于重用。但是,它必须包含在ApplicationController或{Users,Pages,Posts}控制器中。如果不亲自破解,您无法从另一个控制器访问一个控制器的方法。ApplicationController是个例外,所有其他控制器默认都从中继承,Sydney在下面解释了这一点。感谢Yoshiji先生和Sydnet的帮助