14

告白:私は自分のメソッドにプライベートパブリックの可視性のみを使用します!

これは悪いことだと思います。しかし、Railsでは問題として取り上げられていないようです。

保護された可視性を使用しないことが大きな間違いであるRailsの例を誰かが持っていますか?

4

2 に答える 2

9

更新-Rubyの/の本当の説明にprotectedprivateリンクしている以下のコメントを参照してください。確かに、それは私のJava時代から残された根深い偏見でした。私の答えに残された唯一の重要な部分は、アクションではないコントローラーメソッドはすべきではないということですpublic(または少なくともあなたのルートはそれらを保護するべきです)。

単一テーブル継承はprotected、モデル層での継承の最も一般的な使用法の1つであるため、モデル層で役立つ場合の完璧な例です。

コントローラー層では、で定義されたヘルパーメソッドを-ApplicationControllerとしてマークする必要があります。他のコントローラーの場合はアクセスできませんが、Railsの場合はアクションとして扱われます。protectedprivatepublic

個人的には、Railsアプリケーションでも、多くの友人や同僚よりもクラス継承を使用していることがわかりました。私はそれを頻繁に使用するので(そしてJavaの時代から出てきます)、protectedクラスを拡張したい人(通常は私自身)に自由を与えるためにすべてのヘルパーメソッドを好みます-私が本当に恥ずかしくない限り、私はマークしprivateます。:)

于 2009-05-22T20:46:45.877 に答える
0

SingleTableInheritanceがあります

class Person <AR :: base class Teacher <Person calss Student <Person

そして、保護されたメソッドを使用して、StudentとTeacherに共通のプライベートメソッドを実装します。

class Person < AR::base
  def self.find(*args)
    reject_leaves(super(*args))
  end
protected
  def self.reject_leaves(target) #like a private in Teacher and Student
    case target
      when Array target.select{|t| reject_leaves(t)}
      when Person (target.leave_date < Date.today ? target : nil)
      else target
    end
  end
end

免責事項:ここで使用する機能を実装するためのact-as-paranoidなどのプラグインがありますが、ここではより複雑な状況を示しています。ここでは、要点を説明するために簡略化しました。

于 2009-05-22T07:24:16.440 に答える