これを不思議に思うのはあなたが初めてではありません。ビューとコントローラーにロジックがほとんどまたはまったくなく、モデルがプレゼンテーションに依存しない場合、プレゼンテーション ロジックはどこに属しますか?
デコレータ パターンと呼ばれる古い手法を使用できることがわかりました。アイデアは、プレゼンテーション ロジックを含む別のクラスでモデル オブジェクトをラップすることです。このラッパー クラスは、デコレータと呼ばれます。デコレーターは、モデルをプレゼンテーションから分離したまま、ビューからロジックを抽象化します。
Draperは、デコレーターを定義するのに役立つ優れた gem です。
あなたが提供したサンプルコードは、次のように抽象化できます。
コントローラーでビューにデコレーターを渡し@user = UserDecorator.new current_userます。
デコレータは次のようになります。
class UserDecorator
decorates :user
def welcome_message
if user.admin?
"Welcome back, boss"
else
"Welcome, #{user.first_name}"
end
end
end
そして、あなたのビューは単に含まれます@user.welcome_message
モデル自体には、メッセージを作成するロジックが含まれていないことに注意してください。代わりに、デコレータはモデルをラップし、モデル データを表示可能な形式に変換します。
お役に立てれば!