2014-04-30 56 views
0

我在我的Rails 4应用程序中使用gon gem将我的控制器中的值传递给JavaScript。我在我的应用程序的其他部分使用了gon,它工作正常,所以它与gem是否正确加载无关。如何将嵌套的Rails ActiveRecord查询结果传递给gon?

我有以下型号:

class Person < ActiveRecord::Base 
    has_many :addresses 
    end 

class Address < ActiveRecord::Base 
    belongs_to :person 
    belongs_to :city 
end 

class City < ActiveRecord::Base 
    has_many :addresses 
end 

我指定的查询结果是这样的:

gon.my_js_var = @my_instance_var = Address.includes(:person, :city).where("person_id = 1") 

@my_instance_var有我需要的,例如所有值@my_instance_var[i].city.name显示正确的值。但是,gon.my_js_var只有来自Address模型的列,没有来自Person或City的列,例如gon.my_js_var[i].city is undefined

我在这里错过了什么吗?或者我应该以不同的方式做到这一点?

感谢

回答

0

端了重新编写了原始内部联接SQL查询,然后调用ActiveRecord::Base.connection.execute就可以了,所以结果集包含所有记录,不包含嵌套查找。

+0

嗨@jiax,我试图弄清楚这一点,你可以发布你写的确切代码和在哪些文件?我喜欢更多的方向,因为我从来没有写过原始的SQL,也不知道'ActiveRecord :: Base.connection.execute'去哪里了 – james

+0

@james,你可以在你的模型中构建你的SQL查询:'stmt =“SELECT * FROM TABLE”',然后'result = ActiveRecord :: Base.connection.execute(stmt)',然后将'result'传回给你'gon'对象 – jiax

2

尝试使用to_jsonJSON是可访问的gon

@my_instance_var = Address.includes(:person, :city).where("person_id = 1") 
gon.my_js_var = @my_instance_var.to_json(include: [ :person, :city ]) 
+0

'to_json'返回一个字符串表示,任何方式在对象返回完整的查询结果? – jiax

0

使用as_json

gon.my_js_var = Address.where("person_id = 1").as_json.(include: [:person,:city]) 
相关问题