これは、Railsの懸念についての素晴らしいアイデアです: http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns
また、パブリックAPIの一部ではない非常に小さなメソッドを作成することもお勧めします。懸念を使用せずに、それらはRubyクラスのプライベートメソッドになります。
Rails ActiveSupport :: Concernモジュール内にプライベートメソッドを作成することは理にかなっていますか?そうであれば、プライベートは、懸念定義の通常のインスタンスメソッドとクラスメソッドの両方で機能しますか?
Rails
ActiveSupport::Concern
モジュール内にプライベートメソッドを作成することは理にかなっていますか?
懸念事項が最終的に他のクラスに含まれるスマートモジュールであることを考えると、そうです。これは単なる移植可能なコードであり、抽出可能な動作であり、私が書いているときに、コントローラー(またはモデルなど)の一部と見なしたいと思います。したがって、基本的には、通常どおりにメソッドprivate
またはprotected
を宣言するだけです。
たぶん あなたがリンクした投稿 は2013年から更新されていますが、DHHはそこにある例の1つでまさにそれを行っています:
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
それは私の意見ですが、今私はプライベートクラスのメソッドについて頭を悩ませています、それらは何に適していますか?とにかく、本当に必要な場合は、この投稿を参照してください: プライベートクラスメソッドを作成する方法は?
懸念モジュールにプライベートインスタンスメソッドを含めることは理にかなっており、正常に機能します。プライベートクラスのメソッドも正常に機能しますが、上記の投稿に従います。