7
我有問題限制了as_json包括通過動態屬性:Rails的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語法。
任何想法? 嗨
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模板引擎clientside從JSON響應生成視圖)
不是很優雅,但性能對我來說很重要。
我仍然打開更好的想法。 我試過動態has_many:船,:條件=> ... 但這有點煩躁。
這是有效的(投票)。但想象一下擁有數千艘船隻的海盜世界仍在不斷壯大。我的主要隊友需要統計所有海洋上的所有船隻,每次他必須報告一個海洋......這將是我們的SQL地圖上的性能打擊;-)我從一開始就更喜歡乾淨的地圖。 – Xiaolong 2011-05-04 19:21:41
Arrgh!我仍然不能投票,我缺乏作爲新手的聲望。抱歉!! – Xiaolong 2011-05-04 19:22:39
這絕對沒有優化。我之前在其中一個項目上遇到過類似的問題,並且一次無法手動生成所有JSON記錄,但我無法想出一個這樣做的好方法。幸運的是,我的數據庫相對較小,因此對陣列的迭代對我來說工作得很好。 – 2011-05-04 19:24:08