我从我的控制器调用了几种方法,感觉它们应该被拔出并放入控制器之外的可重用类中.人们通常把这些东西放在哪里?我知道我可以将它们放入我的ApplicationController中,但如果我认为以后可以在其他应用程序中使用这些方法,那似乎不是一个很好的解决方案.
另外,我的控制器中有很多实用程序方法,可能不会在其他控制器中使用,或者将来根本不会使用,但我觉得它们只是膨胀了我的控制器.人们通常是将它们移到某个地方以保持清洁,还是最终得到一个巨大的控制器?
我来自Java和Actionscript,我只是为这些东西创建新的util类.
lib目录是一个可以放置模块/类的地方,这些模块/类可以混合在控制器中或由控制器使用(其他任何东西,真的).这可以是放置不属于其他区域的代码的地方(但要小心确保lib本身不会变成混乱).侧面评论只是要记住:
如果您知道有大量相关功能可以或将要在其他应用程序中使用,则可能是一个插件.
还值得记住的是,创建一个不是Active Record对象的模型没有任何问题.所以,取决于你拥有的东西,这也可能有意义.
您可以创建app/modules
目录,并在其中创建XYZUtils模块,例如
module XYZUtils def abc end def efg end end
并在控制器或模型等中根据需要包含模块.
include XYZUtils
您可以为与不同模型或实体相关的实用程序功能创建不同的模块
我不喜欢/lib
目录,因为它应该包含项目相关的代码,而不是应用相关的,例如任务等.
我会将所有与App相关的代码保存在/app
目录中
在lib
目录中创建模块文件:
module ControllerUtil def foo end def bar end end
将模块包含在控制器中:
class UsersController < ApplicationController include ControllerUtil end