2014-04-30 100 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]) 
相關問題