2010-12-15 11 views
0

私はヘルパーをコントローラで利用できるようにする方法があることを知っていますが、これは一般的に悪い形です。これを避けるためには、次のことをどのように改め直すべきですか?ビューとコントローラーのためのRailsヘルパー?

私は連絡先の名字と姓を組み合わせた "fullname"という連絡先ヘルパーを持っています。

レイアウト部分と呼ばれるサブヘッダは、アプリケーションレイアウトでレンダリングし、このコードが含まれる:

<section id="subheader"><%= @subheader %></section> 

コントローラは@subheaderの値を設定します。

問題は、私が@subheaderで "fullname"をしばしば欲しいということです。しかし、これはコントローラからヘルパーにアクセスすることを意味します。このfullnameメソッドは別の場所に存在するはずですか?

答えて

2

fullnameのようなものでは、通常、モデル自体にメソッドを定義するだけです。

fullnameメソッドが何らかのタイプのHTML書式設定を行った場合、これらの部分をヘルパー内に保持します。

+0

ああ:

は今、あなたのapplication_controller.rb内のモジュールが含まれています。ありがとう。 :-) – glortho

1

あなたの質問のタイトルは、別の回答を求める視聴者を引き付けるかもしれないので、私は「私のコントローラーでレールヘルパーを使用することはできますか?そここのための合法的な用途は、あるので、ここでそれを行うためのクリーンな方法があります:

ヘルパーファイルでは、あなたがそうのようなモデルにアクセスするコードをラップ:コードのみあなた

module HelperModuleName 
    [helper code here] 
end 

ラッピング(include ApplicationHelperを使用しているすべてのヘルパーを含めるのではなく)コントローラで使用する必要があります。これはメソッド名の衝突の可能性を減らし、コントローラでヘルパーを使用する選択をより慎重にする必要があるためです。はい、

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    include HelperModuleName 
end 
関連する問題