У меня проблемы с ограничением включения as_json динамическим атрибутом:
@pirates_ships = @current_account.pirates.as_json(:include => {:ships => {:only => [:id, :name]}}, :only => [:id, :last_name])
Это наверняка дает мне всех пиратов со своими кораблями или без них.
Но мне также нужно ограничить корабли, например, ships.ocean_id
Я попытался разрешить его, используя условия:
pirates.includes(:ships).where("ships.ocean_id = ?", @ocean.id).as_json(...)
Ограничение работает, но теперь все пираты без корабля потеряны.
Также не повезло с моим собственным синтаксисом JOIN.
Есть идеи?
Ahoy
UPDATE
Мое решение пока состоит в том, чтобы вручную загружать загрузку. Таким образом, у меня могут быть мои динамические условия:
@pirates = @current_account.pirates
@ships = @current_account.ships.where({:pirate_id.in => @pirates, :ocean_id => @ocean.id})
render :json => { :pirates => @pirates.as_json(...), :ships => @ships.as_json(...) }
Мой обратный вызов Ajax теперь может повторяться: пираты и добавлять для каждого пирата его корабли, если таковые имеются.
(Я использую клиентский движок шаблонов JS для генерации представления из ответа JSON)
Не очень элегантно, но в моем случае важна производительность.
Я все еще открыт для лучших идей.
Я пробовал динамическое has_many: ship,: condition => ...
но это немного странно.