簡體   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