В молбата ми, :foos
имам много :bars
, и аз съм сериализира всеки foo като JSON като така:
@foo.as_json(
except: [:created_at, :updated_at],
include: {
bars: { only: [:ip_addr, :active] }
}
)
Това ми дава следното:
{
"id" => 2,
"name" => "Hello World",
"bars" => [
{ "ip_addr" => "192.123.12.32", "active" => 0 },
{ "ip_addr" => "192.123.12.33", "active" => 1 }
]
}
Както можете да видите, сериализираният ми хеш включва неактивен бар. Как мога да изключа неактивните барове от моя хеш?
Би било чудесно да мога да направя това:
include: { bars: { only: { :active => true }}}
Аз взех as_json
докъдето ще отиде? Трябва ли да превключа към активни сериализатори сега?
Отговори:
3 за отговор № 1Мисля, че бихте могли да опитате да добавите някакъв метод като active_bars
който ще ви върне точно това, от което се нуждаете:
def active_bars
bars.where active: true
end
или дори може да добавите нова връзка:
has_many :active_bars, -> { where active: true }, class_name: "..", foreign_id: ".."
и тогава ще можете да пишете:
@foo.as_json(
except: [:created_at, :updated_at],
include: {
active_bars: { only: [:ip_addr, :active] }
}
)
1 за отговор № 2
вие използвате as_json с условия за персонализиране на json отговор за някои действия, но serializers модел за по подразбиране json отговор, който ви е необходим за най-много отговори.
Прочетете ги Model_Serializer VS. as_json, рекордьорите serializers-от надраскване.