У меня проблемы с ограничением включения as_json динамическим атрибутом:
@pirates_ships = @current_account.pirates.as_json(:include => {:ships => {:only => [:id, :name]}}, :only => [:id, :last_name])
Это наверняка дает мне всех пиратов с их кораблями или без них.
Но мне также нужно ограничить корабли, например ,hips.ocean_id
Я попытался разрешить это включением с условиями:
pirates.includes(:ships).where("ships.ocean_id = ?", @ocean.id).as_json(...)
Ограничение работает, но теперь все пираты без корабля потеряны.
Также не повезло с моим собственным синтаксисом JOIN.
Есть идеи? Привет
ОБНОВЛЕНИЕ
Мое решение пока состоит в том, чтобы вручную загружать . Таким образом, я могу получить свои динамические условия:
@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)
Не очень элегантно, но p в моем случае важна производительность.
Я все еще открыт для лучших идей. Я пробовал использовать динамические has_many :hips,: conditions => ... , но это немного неудобно.