告白:私は自分のメソッドにプライベートとパブリックの可視性のみを使用します!
これは悪いことだと思います。しかし、Railsでは問題として取り上げられていないようです。
保護された可視性を使用しないことが大きな間違いであるRailsの例を誰かが持っていますか?
告白:私は自分のメソッドにプライベートとパブリックの可視性のみを使用します!
これは悪いことだと思います。しかし、Railsでは問題として取り上げられていないようです。
保護された可視性を使用しないことが大きな間違いであるRailsの例を誰かが持っていますか?
更新-Rubyの/の本当の説明にprotected
private
リンクしている以下のコメントを参照してください。確かに、それは私のJava時代から残された根深い偏見でした。私の答えに残された唯一の重要な部分は、アクションではないコントローラーメソッドはすべきではないということですpublic
(または少なくともあなたのルートはそれらを保護するべきです)。
単一テーブル継承はprotected
、モデル層での継承の最も一般的な使用法の1つであるため、モデル層で役立つ場合の完璧な例です。
コントローラー層では、で定義されたヘルパーメソッドを-ApplicationController
としてマークする必要があります。他のコントローラーの場合はアクセスできませんが、Railsの場合はアクションとして扱われます。protected
private
public
個人的には、Railsアプリケーションでも、多くの友人や同僚よりもクラス継承を使用していることがわかりました。私はそれを頻繁に使用するので(そしてJavaの時代から出てきます)、protected
クラスを拡張したい人(通常は私自身)に自由を与えるためにすべてのヘルパーメソッドを好みます-私が本当に恥ずかしくない限り、私はマークしprivate
ます。:)
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などのプラグインがありますが、ここではより複雑な状況を示しています。ここでは、要点を説明するために簡略化しました。