26

これは、レールの懸念に関する素晴らしいアイデアです: http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns

また、パブリック API の一部ではない非常に小さなメソッドを作成することもお勧めします。懸念を使用しないと、それらは ruby​​ クラスのプライベート メソッドになります。

Rails ActiveSupport::Concern モジュール内にプライベート メソッドを作成することは理にかなっていますか? もしそうなら、private は通常のインスタンス メソッドと懸念定義のクラス メソッドの両方で機能しますか?

4

2 に答える 2

35

ActiveSupport::ConcernRailsモジュール内でプライベート メソッドを作成することは理にかなっていますか?

懸念事項は、最終的に他のクラスに含まれるスマート モジュールであることを考えると、そうです。これは単なる移植可能なコードであり、抽出可能な動作であり、作成中のコントローラー (またはモデルなど) の一部と見なしたいと考えています。したがって、基本的には、メソッドを宣言するprivateprotected、通常どおりに宣言するだけです。

リンクした投稿は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
于 2015-11-17T22:31:09.637 に答える
3

それは私の意見ですが、今私はプライベートクラスのメソッドについて頭を悩ませています、それらは何のために良いですか?とにかく、本当に必要な場合は、この投稿を参照してください:プライベートクラスメソッドを作成する方法は?

懸念モジュールにプライベートインスタンスメソッドを含めることは理にかなっており、正常に機能します。プライベートクラスのメソッドも正常に機能しますが、上記の投稿に従います。

于 2013-02-18T01:47:47.847 に答える