5

いくつかのインスタンス変数を持つ Rails 3 アプリの詳細ページがあります。たとえば、私のビューには次のインスタンスがあります。

@product
@program
@action
...etc...

それらの一部は単一の文字列であり、一部は配列 (外部 API からの要求の結果) です。全体として、データは少なくとも 3 つのモデルから取得されます。

私の質問は: インスタンス変数を統合して、ビューとコントローラーを (読みやすさを犠牲にすることなく) きれいに見せるための最良の方法は何ですか? 質問には自由回答があり、それぞれの好みがあることは承知していますが、選択肢にはどのようなものがありますか? インスタンス変数をオブジェクトに結合するという方針に沿って考えているため、前のコードは次のようになります。

Details.product
Details.program
Details.action

どうもありがとう!

更新: オブジェクト ルートに進みますが、実際に実装する良い例 (github、ブログ投稿) はありますか?

4

3 に答える 3

2

インスタンス変数をまったく使用せず、代わりに適切な露出ジェムを使用することをお勧めします。

https://github.com/voxdolo/decent_exposure

http://railscasts.com/episodes/259-decent-exposure

于 2012-09-14T09:13:29.260 に答える
2

私の意見では、コントローラー アクションをクリーンアップする最善の方法は、そこにできるだけ少ないインスタンス変数を割り当てることです。実際には、渡されたパラメーターから直接派生した action/before_filters にインスタンス変数のみを割り当てるようにしています。また、一般に、アクションをスリムに保つために、できるだけ多くのインスタンス変数の割り当てを before_filters にプッシュするようにしています。

ただし、アクションでのインスタンス変数の割り当てを減らす最善の方法は、ビュー ヘルパーを使用することです。たとえば、現在、いくつかの div を出力するために使用するアクションでインスタンス変数を割り当てている場合は、ビューにオブジェクトを渡す必要なく、ビュー ヘルパーを使用して直接出力を行うだけです。

コントローラーの before_filter の例を次に示します。

before_filter :assign_variables, :only => :show

def show; end

private
def assign_variables
  @product = Product.find(params[:product_id])
  @program = Program.find(params[:program_id])
  @action = Action.find(params[:action_id])
end
于 2012-09-14T03:16:47.520 に答える