2012-11-12 10 views
5

私のコントローラにはlatestというアクションがあります。このアクションは最後のレコードを取得し、showテンプレートをレンダリングするだけです。Rails 3 respond_with custom template

class PicturesController < ApplicationController 
    respond_to :html, :json, :xml 

    def latest 
    @picture = Picture.last 

    respond_with @picture, template: 'pictures/show' 
    end 
end 

テンプレートを提供するクリーナーの方法はありますか?これがサイトコントローラであるため、HTML形式の部分をpictures/部分に渡す必要があるように見えます。

class PicturesController < ApplicationController 
    def latest 
    @picture = Picture.last 

    render :show 
    end 
end 

それは絵/パス必要はありません。

答えて

7

あなたがレンダリングするテンプレートの場合、同じコントローラに属している、あなたはちょうどこのようにそれを書くことができます。あなたはここに深く行くことができます:Layouts and Rendering in Rails

は、XMLとJSON形式を保持する必要がある場合は、あなたが行うことができます:

class PicturesController < ApplicationController 
    def latest 
    @picture = Picture.last 

    respond_to do |format| 
     format.html {render :show} 
     format.json {render json: @picture} 
     format.xml {render xml: @picture} 
    end 

    end 
end 
+2

**これは正しい答えです**注目すべきは1つの注目点: 'render 'show'' *を呼び出すと、表示テンプレート*のみがレンダリングされ、showアクションは呼び出されません。したがって、ショーテンプレートに必要な 'show'アクション内にインスタンス変数がある場合、それらを' latest'アクションまたは 'show'テンプレートをレンダリングする他のアクションにも設定する必要があります。 – Andrew

+0

最新情報を見る私はこのアクション(JSONとXMLフォーマット)のために "APIナビゲーション"を保持する必要があります。私は 'respond_with'ブロックを与えることができ、' format.html {render:show} 'を行うことができます。これはまた、はっきりとしたものではないようです。 – mikeycgto

+0

カスタムテンプレートにはどのようにして、残りのアクションの一部になっていますか?共有フォルダ内のカスタムテンプレートはどうですか? – ahnbizcad

5

私は@Dario Barrionuevoと同様にこれをやったが、私はXMLを維持するために必要な&私はrespond_withレスポンダを使用しようとしているので、respond_toブロックを実行することに満足していませんでした。あなたはこれを行うことができます。

class PicturesController < ApplicationController 
    respond_to :html, :json, :xml 

    def latest 
    @picture = Picture.last 

    respond_with(@picture) do |format| 
     format.html { render :show } 
    end 
    end 
end 

JSON & XMLのために必要に応じて、デフォルトの動作が実行されます。 3つすべてではなく、オーバーライドする必要がある1つの動作(HTML応答)を指定するだけで済みます。

Source is here

関連する問題