加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails ActiveSuppport:关注和私有方法

发布时间:2020-12-16 20:12:11 所属栏目:百科 来源:网络整理
导读:这是一个很棒的想法,关于rails: http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns 制作不是公共API一部分的非常小的方法也是一个好主意.在不用担心的情况下,这些成为ruby类中的私有方法. 在Rails ActiveSupport :: Concern
这是一个很棒的想法,关于rails: http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns

制作不是公共API一部分的非常小的方法也是一个好主意.在不用担心的情况下,这些成为ruby类中的私有方法.

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

解决方法

Does it makes sense to create private methods inside of a Rails ActiveSupport::Concern module?

考虑到这些关注是最终将被包含在其他类中的智能模块 – 是的,它是.它只是一个可移植的代码,可提取的行为,我想将其视为我的控制器(或模型等)的一部分,因为我正在编写它.所以基本上你只是按照通常的方式声明私有或受保护的方法.

也许the post you linked自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

对于私有类方法,我同意@Hugo,从不自己使用它们,但是你可以这样实现:

module Dropboxed
  extend ActiveSupport::Concern

  included do
    private_class_method :method_name
  end

  module ClassMethods
    def method_name
    end
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读