ビュー テンプレート (html、rabl) を使用する場合、Rails は既定で、コントローラー アクション名に対応する名前でテンプレートをレンダリングするため、コントローラー アクションで明示的なレンダリング呼び出しが必要ないことを知っています。私はこのコンセプトが気に入っています (私のコントローラー コードでのレンダリングは気にしません)。
例、これは生成されたコントローラーのコードです (Rails 4.1.0):
class ProductsController < ApplicationController
before_action :set_product, only: [:show, :edit, :update, :destroy]
#other actions
# GET /products/1
# GET /products/1.json
def show
end
end
そしてこれはシリアライザーです:
class ProductSerializer < ActiveModel::Serializer
attributes :id, :name, :description, :url, :quantity, :price
end
/products/1.json にアクセスすると、次の 2 つのことが起こると予想されます。
- 省略されるシリアライザーにリストされていないフィールド、
- 「製品」の最上位フィールド内にカプセル化される JSON オブジェクト全体。
ただし、これは発生せず、シリアライザー全体が無視されます。ただし、Show メソッドを次のように変更すると、次のようになります。
# GET /products/1
# GET /products/1.json
def show
@product = Product.find(params[:id])
respond_to do |format|
format.html
format.json { render json: @product }
end
end
そして今はすべて問題ありませんが、 before_action フィルターの利点を失いました (そして、冗長なコードがあるように思えます)。
これは実際にどのように行うべきですか?