6

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

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

  def latest
    @picture = Picture.last

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

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

4

2 に答える 2

7

レンダリングするテンプレートが同じコントローラーに属している場合は、次のように記述できます。

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

    render :show
  end
end

写真/パスは必要ありません。ここでさらに深く掘り下げることができます: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
于 2012-11-12T15:04:19.263 に答える
6

@Dario Barrionuevo と同様にこれを行いましたがrespond_to、レスポンダーを使用しようとしているため、XML および JSON 形式を保持する必要があり、ブロックを行うことに満足していませんでしrespond_withた。これができることがわかりました。

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 応答) のみを指定する必要があります。

ソースはこちら

于 2013-12-03T21:52:22.980 に答える