Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails作为_json包含的条件_Ruby On Rails_Json_Include_Conditional - Fatal编程技术网

Ruby on rails Rails作为_json包含的条件

Ruby on rails Rails作为_json包含的条件,ruby-on-rails,json,include,conditional,Ruby On Rails,Json,Include,Conditional,我无法通过动态属性限制as_json include: @pirates_ships = @current_account.pirates.as_json(:include => {:ships => {:only => [:id, :name]}}, :only => [:id, :last_name]) 这肯定给了我所有有船或没有船的海盗 但我还需要限制船舶,例如船舶。海洋id 我尝试通过包含以下条件来解决此问题: pirates.includes(:ships).

我无法通过动态属性限制as_json include:

@pirates_ships = @current_account.pirates.as_json(:include => {:ships => {:only => [:id, :name]}}, :only => [:id, :last_name])
这肯定给了我所有有船或没有船的海盗

但我还需要限制船舶,例如船舶。海洋id

我尝试通过包含以下条件来解决此问题:

pirates.includes(:ships).where("ships.ocean_id = ?", @ocean.id).as_json(...)
@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(...) }
限制有效,但现在所有没有船的海盗都失踪了

我自己的连接语法也不好用

有什么想法吗? 喂

更新

到目前为止,我的解决方案是手动加载。这样我就可以拥有我的动态条件:

pirates.includes(:ships).where("ships.ocean_id = ?", @ocean.id).as_json(...)
@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响应生成视图)

不是很优雅,但性能对我来说很重要

我仍然对更好的想法持开放态度。 我试过动态有很多:船,:条件=>。。。
但这有点麻烦。

我想你最好的办法是在从
生成
@pirates\u ships
散列后,将其更改为json
(我尝试了多种不同的include,等等,但都无法实现)


那行得通(投赞成票)。但想象一下,一个拥有数千艘船只且仍在增长的海盗世界。我的大副每次必须报告一个大洋的情况时,都需要清点所有大洋上的所有船只。。。这将是对我们的sql映射的性能打击;-)我希望从一开始就有一张干净的地图。啊!我仍然不能投票支持,作为一个新手,我缺乏15%的声誉。很抱歉它绝对不是优化的。我以前在我的一个项目中遇到过类似的问题,由于没有一次手动生成所有JSON记录,我无法想出一个好的方法来实现这一点。幸运的是,我的数据库相对较小,因此对数组的迭代对我来说效果很好。