Rails as_json включает в себя с условиями

У меня проблемы с ограничением включения 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 => ... , но это немного неудобно.

7
задан Xiaolong 5 May 2011 в 16:53
поделиться