2011-05-11 160 views
2

無法生成一些json。我試圖渲染 單個活動記錄結果到JSON是這樣的:Rails 3 respond_with json問題

@data = User.find(1) 
respond_with(@data, :include => :status) 

JSON結果:

{ 
    -user: { 
    address: null 
    email: "[email protected]" 
    first_name: "Test" 
    last_name: "Man" 
    status_id: 1 
    username: "testguy" 
    status: { } 
    } 
} 

所以什麼問題?問題是:包含=>:狀態似乎 不能帶出關係。在我的用戶模型中,我有一個 belongs_to:status。我如何得到這個工作在一個單一的結果集上?

當我這樣做:

@data = User.where("id = 1") 
respond_with(@data, :include => :status) 

的關係顯示了JSON結果設定罰款這種方式。但它的 內的對象數組,我不想要。

任何想法?

回答

1

你可能已經通過現在的隊友解決了它,但是如果你仍然遇到probs,你可以這樣做,如果你想要嗎?

@data = User.find(1, :include => :status) 

respond_to do |format| 
    format.json do 
    render @data.to_json(:include => :status) 
    end 
end 

如果這樣不起作用,那麼您的關聯可能有問題。有一個非常好的部分在協會的預先加載「這裏的API:

http://apidock.com/rails/ActiveRecord/Associations/ClassMethods

+0

娜..試過了。不好。我仍然在json響應中獲得空白狀態對象。我知道關係是工作的原因,如果我在普通視圖中運行@ data.status我得到的對象。 – 2011-05-13 04:32:41

1

由於nixterrimus指出Rabl的是真的要走的路。它很簡單,乾淨而優雅。我對rails比較陌生,並沒有使用這些技術(to_json等),但是做了一些研究並實際使用了RABL,我不禁想知道爲什麼它不是Rails的本地特性。

7

我假設你想要包含的狀態不是以任何方式與用戶對象相關聯的http狀態代碼(200,201等)之一,也不是你自己的變量。

使用Rails 3.0.10和Ruby 1.9.2,你可能會發現這兩種解決方案適合你。如下代替respond_with使用render

溶液1

render :json => {:data => @data, :status => "whatever"} 

JSON結果是:

{ 
    data: 
    { 
    user: 
    { 
     address: null 
     email: "[email protected]" 
     first_name: "Test" 
     last_name: "Man" 
     status_id: 1 
     username: "testguy" 
    } 
    } 
    status: "whatever" 
} 

溶液2

render :json => {:user => {:address => @data.address, :email => @data.email, ..., :status => "whatever"}} 

JSON結果是:

{ 
    user: 
    { 
    address: null 
    email: "[email protected]" 
    ... 
    status: "whatever" 
    } 
} 

我希望這就是你要找的。

+0

謝謝你的回答 – 2013-04-08 11:06:31

3

where返回一個數組,所以你的結果是有道理的。你需要where().first,或者因爲它只是一個ID查找,只需使用find

這是很久以前的事了,不過,這是最簡潔的答案:

@data = User.find(1) 
respond_with(@data, :include => :status) 
+0

這對我很好(即在'respond_with'調用中指定':include'),但我似乎無法找到任何文檔,甚至沒有在'responders' gem自述文件中找到。你怎麼知道使用這個功能? – Dominick 2015-05-14 06:00:19