2017-08-03 54 views
0

我不知道在http://api.rubyonrails.org/下面是否有用法的解釋,而不是http://guides.rubyonrails.org像`render json:@ user`這樣的用法的API文檔在哪裏?

render json: @user 

雖然有page in Rails Guide提這一點,它不包括像:include其他可用的選項,例如:

render json: @user, include: { blog: { only: [:name, :permalink]} } 

我不能相信這樣的通用的API是很難在其官方找到API文檔。

+0

你有沒有機會使用[ActiveModelSerializers](https://github.com/rails-api/active_model_serializers)?我看到他們在渲染時有一個[include option](https://github.com/rails-api/active_model_serializers/blob/0-10-stable/docs/general/adapters.md#include-option),但我'我從來沒有見過使用過或之前提到過的,儘管這可能只是我脫離了循環 –

+0

它可以是有用的,如果我們想要返回'JSON'響應ajax請求。 我還將它用於控制器中對象的調試目的 – uzaif

+0

@SimpleLime不,我的Gemfile.lock中沒有active_model_serializers。 –

回答

0

周圍挖一點,並發現了,到add一個新規定的ActionController::Renderers documentation

要創建渲染器傳遞給它一個名字和一個塊。該塊有兩個參數,第一個是與其鍵配對的值,第二個是傳遞給渲染的選項的剩餘散列值。

,然後如果你view it's source on GitHub你可以看到,當他們創建:json渲染,他們這樣做:

add :json do |json, options| 
    json = json.to_json(options) unless json.kind_of?(String) 
    ... 
end 

所以,Rails的,只是在「與它配對的價值是關鍵」(調用to_json這是@userrender json: @user)傳遞所有你傳遞給render的附加函數,在這種情況下是include

所以,如果你想知道什麼include選項是幹什麼的,你就需要檢查@user.to_json方法,然後調用ActiveSupport::JSON.encode這只是一種代表到ActiveSupport::JSON::Encoding::JSONGemEncoder#encode,然後就在對象上調用as_json並把它變成一個串。