这是一个关于rails关注的好主意:http: //37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns
制作不属于公共 API 的非常小的方法也是一个好主意。在不使用关注点的情况下,它们将成为 ruby 类中的私有方法。
在 Rails ActiveSupport::Concern 模块中创建私有方法有意义吗?如果是这样,private 是否适用于关注定义中的常规实例方法和类方法?
这是一个关于rails关注的好主意:http: //37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns
制作不属于公共 API 的非常小的方法也是一个好主意。在不使用关注点的情况下,它们将成为 ruby 类中的私有方法。
在 Rails ActiveSupport::Concern 模块中创建私有方法有意义吗?如果是这样,private 是否适用于关注定义中的常规实例方法和类方法?
ActiveSupport::Concern
在 Rails模块中创建私有方法有意义吗?
考虑到关注点是最终将包含在其他类中的智能模块——是的,确实如此。它只是一个可移植的代码,可提取的行为,我想在编写它时将它视为我的控制器(或模型等)的一部分。所以基本上你只是声明方法private
或protected
像往常一样。
也许您链接的帖子自 2013 年以来已更新,但 DHH 在其中的一个示例中确实做到了这一点:
module Dropboxed
extend ActiveSupport::Concern
included do
before_create :generate_dropbox_key
end
def rekey_dropbox
generate_dropbox_key
save!
end
private # <- Let's list some privates
def generate_dropbox_key
self.dropbox_key = SignalId::Token.unique(24) do |key|
self.class.find_by_dropbox_key(key)
end
end
end
至于private
类方法,我同意@Hugo 并且自己从未使用过它们,但是您可以通过以下方式实现这一点:
module Dropboxed
extend ActiveSupport::Concern
included do
private_class_method :method_name
end
module ClassMethods
def method_name
end
end
end
这只是我的意见,但现在我对私有类方法摸不着头脑,它们有什么用?无论如何,如果您真的需要它们,请参阅这篇文章:如何创建私有类方法?
在关注模块中拥有私有实例方法确实有意义,并且可以正常工作。私有类方法也可以正常工作,但要遵循上述帖子。