あなたがユーザーコントローラーにいて、ショーリクエストのjsonレスポンスを取得したい場合、show.jsonという名前のviews/users /ディレクトリにusers#showの後にファイルを作成できるといいでしょうアクションが完了すると、ファイルがレンダリングされます。
現在、次の行に沿って何かをする必要があります。
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json{
render :json => @user.to_json
}
end
end
しかし、次のように自動的にレンダリングされるshow.jsonファイルを作成できると便利です。
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json
end
end
これは私に多くの悲しみを救い、コントローラーでjsonをレンダリングするときに得られる恐ろしく汚い感じを洗い流します
respond_to
ブロックで次のようなことができるはずです。
respond_to do |format|
format.json
render :partial => "users/show.json"
end
テンプレートはapp/views/users/_show.json.erb
でレンダリングされます。
ビューを追加してみてくださいusers/show.json.erb
これは、JSON形式のリクエストを行うときにレンダリングされる必要があります。また、erbによってレンダリングされるという利点も得られるため、ファイルは次のようになります。
{
"first_name": "<%= @user.first_name.to_json %>",
"last_name": "<%= @user.last_name.to_json %>"
}
他の人が述べたように、users/show.jsonビューが必要ですが、テンプレート言語を考慮するオプションがあります...
ERB
箱から出して動作します。 HTMLには最適ですが、JSONにはひどいことがすぐにわかります。
良い解決策。依存関係を追加して、そのDSLを学習する必要があります。
RABLと同じ取引:良い解決策。依存関係を追加して、そのDSLを学習する必要があります。
プレーンルビー
RubyはJSONの生成に優れており、HashオブジェクトまたはARオブジェクトでto_json
を呼び出すことができるため、新たに学ぶことはありません。テンプレートの.rb拡張子を(初期化子で)登録するだけです:
ActionView::Template.register_template_handler(:rb, :source.to_proc)
次に、ビューusers/show.json.rbを作成します。
@user.to_json
このアプローチの詳細については、 http://railscasts.com/episodes/379-template-handlers を参照してください
RABLはおそらく、ERb構文に代わるよりクリーンな代替物を探している場合に見た、これに対する最も優れたソリューションです。他のソリューションであるjson_builderとargonautはどちらもやや時代遅れに見え、パッチを適用しないとRails 3.1では動作しません。
RABLはgemを介して利用できます。またはGitHubリポジトリを確認してください。良い例も
たまたまこのページにたどり着く他の人のために、この回答を更新するだけです。
Rails 3では、views/users/show.json.erb
にファイルを作成するだけです。 @user
オブジェクトはビューで使用できます(htmlの場合と同じように)。もうto_json
は必要ありません。
要約すると、それはただ
# users contoller
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json
end
end
そして
/* views/users/show.json.erb */
{
"name" : "<%= @user.name %>"
}
show.json.erb
ファイルに内容を追加するだけです
<%= @user.to_json %>
コントローラで利用できない追加のヘルパーメソッド、つまりimage_path(@user.avatar)
またはJSONで追加のプロパティを生成する何かが必要な場合に役立つことがあります。
<%= @user.attributes.merge(:avatar => image_path(@user.avatar)).to_json %>
これは潜在的にERBよりも優れたオプションであり、高速です: https://github.com/dewski/json_builder
これがRoRにとって初めてのことです。 JSON形式を直接レンダリングできます
def YOUR_METHOD_HERE
users = User.all
render json: {allUsers: users} # ! rendering all users
END