/ / Rails as_json с условия - рубинка на релсите, сериализация

Релси as_json с условия - рубинки на релси, сериализация

В молбата ми, :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-от надраскване.