2012-01-02 5 views
11

私の理解では、ヘルパーは主にビュー固有のロジックからビューをクリーンアップするのに使われます。Railsヘルパーを使ってパーシャルをレンダリングする

しかし、私の現在の新しいプロジェクト(レガシー・アプリケーション)上で、私はこの

def itemprepare 
    render :partial => 'items/itemlist_summary' 
end 

のように見えるのヘルパーの多くにつまずいてきたが、この正しいですか?私に部分的な部分を描画することは、抽象化する必要のあるロジックが含まれていないため、ビュー内でやりたいことのように思えます。

これらのヘルパーをすべてインライン化すればよいですか?

答えて

8

部分をレンダリングすることはヘルパーに属しません。ヘルパーは、論理を含むことをするのに役立つはずです。ロジックはパーシャルをレンダリングし、何かを表示するかどうかを決定するロジックでない限り、コントローラには属しません。

0

私たちはプロジェクトのようないくつかのヘルパーを持っていますが、それらのほとんどはカスタム宝石です。ヘルパーで部分レンダリングをラップすることで、アプリケーションが情報のレンダリング方法を知ることができなくなり、ロジックの拡張、部分的な変更、またはビューの要求された部分をレンダリングする限り、このヘルパー内で必要な処理を簡単に実行できます。場合によっては、これらの部分的な処理には、宝石自体の内部にあるデータが必要であり、アプリケーションに公開する必要はありません。したがって、アプリケーションは、必要なパラメータとローカルを作成し、それらを部分に渡すヘルパーメソッドを呼び出します(まったくパラメータを持たないこともあります)。

しかし、あなたがアプリケーション内で部分的にレンダリングしているときに、そのレンダリングの周りに広範なロジックを必要としないときは、すべての部分に対して新しいヘルパーを作成することから多くの使用はないと思います。

6

部分的な描画にヘルパーメソッドを使用しないでくださいが、状況によっては必要な場合があります。パーシャルは、ビューに属して使用しますが、時にはそれがヘルパーにそれらを使用すると便利です、Ajedi32が言うよう

def itemprepare 
    concat(render(:partial => 'items/itemlist_summary')) 
end 
+0

私が探していたもの –

1

:そのような状況のために、あなたはconcatメソッドを使用する必要があります。私は自分のアプリケーションで行ったことを示すことが有用であることを願っています。

私は素晴らしい記事Thinking of Rails Helper to help DRY our viewに従っています。固定ヘッダー、ナビゲーションバー、ナビゲーションパネル、フッター付きのJquery Mobileを使用しています。各ページの最後に

​​

:私はフッターおよびナビゲーションパネルなので、通常はそれがされているだろうを含める必要があり、すべてのページで

は、それから私は、アプリケーションヘルパーに部分的にレンダリングリファクタリング、今では、次のとおりです。

# app/helpers/application_helper.rb 
    def page_footer 
    footer = content_tag :div , :"data-role" => "footer" do 
     content_tag :h4, "Page Footer" 
    end 
    nav_panel = render(:partial => 'shared/nav_panel') 
    footer + nav_panel 
    end 

と私は呼んビューで:

<%= page_footer %> 

これは単なる短い例です。実際には、アプリはログイン状態、ユーザー言語などに応じて変化するフッターを持っています。

関連する問題