繁体   English   中英

Rails ActiveSuppport:关注和私有方法

[英]Rails ActiveSuppport:Concern and Private Methods

关于rails的关注点是个好主意:http: //37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns

并且制作非常小的方法也是一个好主意,这些方法不属于公共API。 没有使用顾虑,那些成为ruby类中的私有方法。

在Rails ActiveSupport :: Concern模块中创建私有方法是否有意义? 如果是这样,私有工作是否在关注定义中用于常规实例方法和类方法?

在Rails ActiveSupport::Concern模块中创建私有方法是否有意义?

考虑到关注点是最终将被包含在其他类中的智能模块 - 是的,确实如此。 它只是一个可移植的代码,可提取的行为,我想把它当作我的控制器(或模型等)的一部分,因为我正在编写它。 所以基本上你只是像往常一样声明方法privateprotected

也许您链接的帖子自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

这只是我的意见,但现在我对私人班级方法感到头疼,他们有什么好处? 无论如何,如果你真的需要它们,请参考这篇文章: 如何创建一个私有类方法?

在关注模块中使用私有实例方法确实有意义,并且可以正常工作。 私人类方法也可以正常工作,但遵循上述帖子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM