2012-01-20 37 views
5

在我的控制,我有:Rails如何在呈現json時更改屬性名稱?

@pakkes = Pakke.where("navn like ?", "%#{params[:q]}%") 

respond_to do |format| 
    format.html # index.html.erb 
    format.xml { render :xml => @pakkes } 
    format.json { render :json => @pakkes.map(&:attributes) } 
end 

渲染JSON時如何更改屬性navnname

+0

看看acts_as_api寶石 – apneadiving

回答

11

您可以在Pakke單行法做到這一點:

def as_json(*args) 
    super.tap { |hash| hash["name"] = hash.delete "navn" } 
end 

調用super會生成JSON哈希像往常一樣,那麼所返回之前,你就會趁虛而入並更改「navn」條目的關鍵字。

+0

這是一個優雅超酷的解決方案!感謝您:) – Amir

+0

偉大的解決方案,方便與舊的IE版本衝突的那些受保護的屬性... –

+0

不刪除我的專欄既不在哈希中添加一個。雖然它看起來很好,但它不起作用。 –

2

覆蓋as_json方法。它被to_json用來產生輸出。你可以這樣做:

def as_json options={} 
{ 
    name: navn, 
    .... # other attributes you want to add to json 
} 
end