创建这样的模块有哪些优点和缺点:
module Section
def self.included(base)
base.class_eval do
has_many :books
end
end
def ensure_books
return false if books <= 0
end
end
...ActiveRecord 方法在模块中的哪些位置使用,而不是直接在它们所属的类上使用?
模块应该用于这样的方法吗?
最佳答案
最明显的优点是您可以将共享的功能放在一个地方。这只是保持代码组织化和模块化的一般优势(没有双关语意图)——当然,您应该这样做
使用 Active Record 方法不会使这些模块以任何方式变得特殊。
最明显的缺点是您编写的代码稍微复杂一些。您不能直接在模块中使用 validates_presence_of
,因为它不是从 ActiveRecord::Base
继承的。 (Rails 3 应该 make it easier to selectively extend your own classes/modules with bits of ActiveRecord-Functionality
相反,当包含模型时,您需要在模型类上调用 Active-Record-Methods:
module FooHelper
def self.included(other)
other.send(:has_many, :foos)
end
end
所以主要的缺点是你的代码变得有点难以阅读。
如果您只是将单个类分解为单独的部分,并且不需要在其他地方重用代码,则可以使用 concerned_with
-pattern这是通过重新开课来实现的。
另一方面,如果您需要更多功能,例如扩展程序的配置参数,请考虑 writing a plugin
关于ruby-on-rails - 将 ActiveRecord 方法放入模块中的优点和缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2078955/