Model-View-Controller(MVC)の場合:
- モデルは、データ、およびデータに密接に関連するすべての機能(低レベルロジック)を保持します
- コントローラはビジネスロジック(高レベルのアプリケーションロジック)を保持します
- ビューはプレゼンテーション層(ユーザーインターフェイス)を保持します
ビューは、パブリックモデルメソッドにアクセスできます。(注:すべてのrubyメソッドはデフォルトでパブリックです。)もちろん、モデルオブジェクトは、適切なコントローラーメソッドで最初にインスタンス化する必要があり、コントローラー@person
のローカル変数(ie person
)ではなくインスタンス変数(ie)である必要があります。
コントローラは、パブリックモデルメソッドにもアクセスできます。
保護されたメソッドは、クラス内またはその子内へのアクセスを制限します。プライベートメソッドは、クラス内へのアクセスのみを制限します。
クラスメソッド、つまりdef Person.some_method ...
、パブリック、プロテクト、プライベートとして定義されているかどうかに関係なく、どこにでも表示されているように見えますが、これは直感に反します。
自己についての質問について...モデル内からモデル自体のメソッドへのすべての呼び出しに自己を使用でき、間違いはありません。
たとえば、first_name列とlast_name列を持つPersonモデルの場合:
class Person < ActiveRecord::Base
def full_name
"#{self.first_name} #{self.last_name}"
end
def parse_name full
self.first_name, self.last_name = full.split
end
end
しかし、それはやり過ぎです。実際には、ActiveRecordで属性を取得するためにselfを使用する必要はなく、属性を設定するためだけに使用する必要があるため、次のように問題ありません。
class Person < ActiveRecord::Base
def full_name
"#{first_name} #{last_name}"
end
def parse_name full
self.first_name, self.last_name = full.split
end
end