我已經在Rails 3.2.19中使用了AMS(0.8),但是我真正與他們鬥爭的地方之一是如何控制序列化程序是否包含它們的關聯。我明顯使用AMS來構建JSON Api's。有時一個序列化器是葉子或者最遠的元素,有時它是最高層次,需要包含關聯。我的問題是做這件事的最好方法是什麼,或者是我在下面做的解決方案(或者是最好的解決方案)。如何有條件地包含Rails活動模型串行器中的關聯v0.8
我已經看到了一些討論,但我覺得他們很混亂(和基於版本)。很明顯,對於Serializer屬性或關聯,有一個include_XXX?方法,你可以在這裏返回一個真實或虛假的陳述。
這是我提出的代碼 - 它是一個釀酒師,有很多wine_items。這是你如何做到這一點?
模型類:
class WineItem < ActiveRecord::Base
attr_accessible :name, :winemaker_id
belongs_to :winemaker
end
class Winemaker < ActiveRecord::Base
attr_accessible :name
has_many :wine_items
attr_accessor :show_items
end
串行器:
class WinemakerSerializer < ActiveModel::Serializer
attributes :id, :name
has_many :wine_items
def include_wine_items?
object.show_items
end
end
class WineItemSerializer < ActiveModel::Serializer
attributes :id, :name
end
,並在我的控制器:
class ApiWinemakersController < ApplicationController
def index
@winemakers=Winemaker.all
@winemakers.each { |wm| wm.show_items=true }
render json: @winemakers, each_serializer: WinemakerSerializer, root: "data"
end
end
AMS 0.10.2:不起作用。 'def include_wine_items?'不起作用 - 不管它是否返回true或false,都包含關聯。 – prograils 2017-02-15 07:25:47