在轨道中将控制器访问的可重用方法放在何处

99m*_*les 26 ruby architecture ruby-on-rails

我从我的控制器调用了几种方法,感觉它们应该被拔出并放入控制器之外的可重用类中.人们通常把这些东西放在哪里?我知道我可以将它们放入我的ApplicationController中,但如果我认为以后可以在其他应用程序中使用这些方法,那似乎不是一个很好的解决方案.

另外,我的控制器中有很多实用程序方法,可能不会在其他控制器中使用,或者将来根本不会使用,但我觉得它们只是膨胀了我的控制器.人们通常是将它们移到某个地方以保持清洁,还是最终得到一个巨大的控制器?

我来自Java和Actionscript,我只是为这些东西创建新的util类.

Pet*_*ete 13

lib目录是一个可以放置模块/类的地方,这些模块/类可以混合在控制器中或由控制器使用(其他任何东西,真的).这可以是放置不属于其他区域的代码的地方(但要小心确保lib本身不会变成混乱).侧面评论只是要记住:

  • 如果您知道有大量相关功能可以或将要在其他应用程序中使用,则可能是一个插件.

  • 还值得记住的是,创建一个不是Active Record对象的模型没有任何问题.所以,取决于你拥有的东西,这也可能有意义.


Sah*_*lra 11

您可以创建app/modules目录,并在其中创建XYZUtils模块,例如

module XYZUtils
  def abc
  end

  def efg
  end
end
Run Code Online (Sandbox Code Playgroud)

并在控制器或模型等中根据需要包含模块.

include XYZUtils
Run Code Online (Sandbox Code Playgroud)

您可以为与不同模型或实体相关的实用程序功能创建不同的模块

我不喜欢/lib目录,因为它应该包含项目相关的代码,而不是应用相关的,例如任务等.

我会将所有与App相关的代码保存在/app目录中


Har*_*tty 10

lib目录中创建模块文件:

module ControllerUtil
  def foo
  end

  def bar
  end
end
Run Code Online (Sandbox Code Playgroud)

将模块包含在控制器中:

class UsersController < ApplicationController
  include ControllerUtil
end
Run Code Online (Sandbox Code Playgroud)