2011-09-25 9 views
2

この方法において:ApplicationControlerで定義されhelper_methodとヘルパー作らレンダリング:配列を返す部分ApplicationControllerにで定義されたものの場合、文字列場合ApplicationHelper

def admin_buttons 
    render :partial => 'portable/admin/admin_buttons' 
    end 

戻り、この(ないhtml_safe):

を[ "私の部分的な出力"]

しかし、ApplicationHelperで定義されている場合、通常は期待される文字列を返します。

わかりません。これは私がレールで知っている限り新しい動作です。

+1

任意のコントローラメソッドは、レンダリングされたビューを返すべきではありません。 – coreyward

答えて

3

簡単に言えば、コントローラのrenderをヘルパーにコールしないでください。それはちょうどそのように動作しません

renderのコントローラでは、renderは互換的に使用することはできません。これはRails 3.1では新しくありません。

コントローラーでrenderを呼び出すと、最終的にビューのrenderが呼び出され、その結果はresponse_bodyとして格納されます。レスポンスボディは、最終的にRackが期待する方法で、文字列配列(出力として見えるもの)として返されます。

これらのリンクは、これがどのように機能するかについていくつかのより多くの光を当てることがあります。
- The controller's definition of render (metal)
- It's superclass method, where response_body is set (abstract_controller)

+0

私は3.1まで3年間この問題を経験したことがありません。ヘルパーでレンダリングを呼び出すことは、ヘルパーの主な用途の1つです。これは、アプリケーション全体で部分的な呼び出しをきれいにして乾燥させるためです。私はモジュールを作成してApplicationHelperに含めることでこの問題を解決しました。コントローラーヘルパーのrenderを呼び出すことは意味がありません。 – pixelearth

+0

はい、あなたは正しいです。パーツのレンダリングは、ヘルパーで非常に頻繁に行うことです。レンダリングされたリクエストに対するレスポンスをレンダリングするコントローラの 'render'メソッドに対して、テンプレートのレンダリングの実際の作業を行うビューの' render'メソッドを呼び出していることを確認するだけです。 – numbers1311407

+0

私はこれがhelper_methodを持つヘルパーとして定義されているが、明らかにそうではないと考えました。あなたの入力のためのTnx。 – pixelearth

関連する問題