2014-12-23 54 views
0

具有以下實體,租金及地區:如何連接使用Rails 4生成JSON的表?

class Rent < ActiveRecord::Base 
    belongs_to :region 

    validates :region, presence: true 
end 

class Region < ActiveRecord::Base 
    has_many :rents 
end 

爲了得到一個租對象是簡單的做了以下內容:

def show 
    rent = Rent.find(params[:id]) 
    render json: rent 
    end 

這將成功地返回租金:

{ 
    "id": 1, 
    "title": "blah", 
    "region_id": 1, 
    "created_at": "2014-12-16T04:09:00.407Z", 
    "updated_at": "2014-12-16T04:09:00.407Z" 
} 

現在,我想加入該地區的這一成果。該理想的結果將類似於此:

{ 
    "id": 1, 
    "title": "blah", 
    "region_id": 1, 
    "created_at": "2014-12-16T04:09:00.407Z", 
    "updated_at": "2014-12-16T04:09:00.407Z" 
    "region": { 
    "id": 1, 
    "title": "blah", 
    "created_at": "2014-12-16T04:09:00.507Z", 
    "updated_at": "2014-12-16T04:09:00.507Z" 
    } 
} 

爲了做到這一點,官方RoR documentation提到使用join條款應該解決這個問題。所以這就是我所做的:

def show 
    rent = Rent.joins(:region).find(params[:id]) 
    render json: rent 
    end 

不幸的是,這最後一次狙擊的結果是完全一樣的,通過它自己獲得租金。 JSON響應中沒有包含region對象。

我在做什麼錯,我應該怎麼做呢?

回答

2

嘗試

rent = Rent.find(params[:id]) 
render :json => rent.to_json(:include => :region) 

這將包括從關係時,它正在創建的JSON對象的對象數據。

+0

哇,這就像一個魅力工作!請告訴我更多關於它的信息,它是如何工作的以及任何與ror文檔相關的鏈接:) – Lucio

+1

http://apidock.com/rails/ActiveRecord/Serialization/to_json官方文檔位於此處,顯示您可以使用的選項包括這一個。也可以看看這個博客http://www.tigraine.at/2011/11/17/rails-to_json-nested-includes-and-methods –

+0

你可能會發現有用的其他東西是「僅」,只顯示數據字段您需要使用JSON和「方法」,以便您可以在模型中包含方法的輸出 –