Я знаю, что при использовании шаблонов представлений (html, rabl) мне не нужен явный вызов рендеринга в моем действии контроллера, потому что по умолчанию Rails отображает шаблон с именем, соответствующим имени действия контроллера. Мне нравится эта концепция (не заботясь о рендеринге в моем коде контроллера), и поэтому задайтесь вопросом, возможно ли это также при использовании ActiveModel :: Serializers?Поддерживает ли ActiveModel :: Serializer явный вызов визуализации?
Пример, это код из генерируемого контроллера (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, я бы ожидают две вещи случаются:
- Поля, не указанные в сериализатором быть опущен,
- Весь объект JSON, который будет инкапсулирован в поле верхнего уровня продукта.
Однако этого не происходит, весь сериализатор игнорируется. Но если я изменить шоу метод следующим образом:
# 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 фильтра (и мне кажется, что у меня есть некоторый избыточный код).
Как это должно быть сделано?
@zmilojko Вы пытались использовать ['response_with'] (http://api.rubyonrails.org/classes/ActionController/MimeResponds.html#method-i-respond_with)? Я думаю, 'response_with (@product)' приблизит вас к тому, что вы не хотите. [Пример из «ActiveModel :: Serializer» README] (https://github.com/rails-api/active_model_serializers#render-json). –
@PaulFioravanti Но это не то, что мне нужно. Я бы хотел, чтобы метод show показывался пустым, поскольку генератор Rails4 создает его, но все же можно использовать Serializer, как определено в вопросе (а не jbuilder, так как это исключает Rails). – zmilojko
@zmilojko Является ли это прямым Rails 4.1? Или приложение rails-api? Как вы создаете начальное состояние своего приложения? – noel