web-dev-qa-db-ja.com

Railsでは、ビューを使用してJSONをどのようにレンダリングしますか?

あなたがユーザーコントローラーにいて、ショーリクエストの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をレンダリングするときに得られる恐ろしく汚い感じを洗い流します

123
Matthew

respond_toブロックで次のようなことができるはずです。

respond_to do |format|
    format.json 
    render :partial => "users/show.json"
end

テンプレートはapp/views/users/_show.json.erbでレンダリングされます。

63
Alex Reisner

ビューを追加してみてくださいusers/show.json.erbこれは、JSON形式のリクエストを行うときにレンダリングされる必要があります。また、erbによってレンダリングされるという利点も得られるため、ファイルは次のようになります。

{
    "first_name": "<%= @user.first_name.to_json %>",
    "last_name": "<%= @user.last_name.to_json %>"
}
55
erik

他の人が述べたように、users/show.jsonビューが必要ですが、テンプレート言語を考慮するオプションがあります...

ERB

箱から出して動作します。 HTMLには最適ですが、JSONにはひどいことがすぐにわかります。

RABL

良い解決策。依存関係を追加して、そのDSLを学習する必要があります。

JSON Builder

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 を参照してください

31
tybro0103

RABLはおそらく、ERb構文に代わるよりクリーンな代替物を探している場合に見た、これに対する最も優れたソリューションです。他のソリューションであるjson_builderとargonautはどちらもやや時代遅れに見え、パッチを適用しないとRails 3.1では動作しません。

RABLはgemを介して利用できます。またはGitHubリポジトリを確認してください。良い例も

https://github.com/nesquena/rabl

27
zapnap

たまたまこのページにたどり着く他の人のために、この回答を更新するだけです。

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 %>"
}
21
James Lim

show.json.erbファイルに内容を追加するだけです

<%= @user.to_json %>

コントローラで利用できない追加のヘルパーメソッド、つまりimage_path(@user.avatar)またはJSONで追加のプロパティを生成する何かが必要な場合に役立つことがあります。

<%= @user.attributes.merge(:avatar => image_path(@user.avatar)).to_json %>
10
Priit

これは潜在的にERBよりも優れたオプションであり、高速です: https://github.com/dewski/json_builder

6
PETER BROWN

これがRoRにとって初めてのことです。 JSON形式を直接レンダリングできます

def YOUR_METHOD_HERE
  users = User.all
  render json: {allUsers: users} # ! rendering all users
END
0
aRtoo