0

私はPlaceモデルとを持っていPlacesControllerます。現在、コントローラーは特定のオブジェクトで JSON に応答します。応答されたオブジェクトにフィールドを追加したいと思います。たとえば、メソッドによってクエリされたすべての場所のタグを追加したいと思いますPlace.tags

オブジェクトのリストをハッシュのリストに変換して必要な属性を追加するか、モデルに新しい列を追加して、オブジェクトのリストを反復するコントローラーに入力します。これを行うためのより良い方法があるかどうかはわかりません。

4

4 に答える 4

5

私は仮定しています:

 class Place < ActiveRecord:Base
   has_many :tags

もしそうなら、関連するタグをプレース オブジェクトの json に追加しようとしているだけですか? もしそうなら、あなたは使うことができます(「場所」は場所オブジェクトです):

 place.to_json(:include=>:tags)
于 2013-02-05T18:17:42.180 に答える
1

テンプレートを使用して JSON を生成することもできます。これにより、JSON に表示される内容を制御でき、to_json または render :json を介してレンダリングするよりも大幅に高速になります。

ここで JSON をレンダリングする最速の方法に関する私の質問を確認してください: What is the best way to render json in rails .

RABL ( https://github.com/nesquena/rabl ) は速くて簡単にセットアップできることがわかりました。

たとえば、RABL では、次のようにします。

class PlacesController < ApplicationController
  def show
    @place = Place.find(params[:id])
  end
end

そしてビューで:

object @place => :place
attributes :id, :name

children :tags => :tags do
  attributes :id, :name
end
于 2013-02-05T18:24:46.660 に答える
0

この種の状況では、おそらくプレゼンター パターンを使用します。こちらをご覧ください: http://blog.jayfields.com/2007/03/rails-presenter-pattern.html

プロアカウントをお持ちの場合は、Railscast もあります: http://railscasts.com/episodes/287-presenters-from-scratch

于 2013-02-05T18:12:24.537 に答える
-1

私の解決策がより良い方法であるかどうかはわかりません

# in controller
@place = Place.first
@place[:place_tags] = @place.tags.map(&:attributes)
render :json => @place
于 2013-02-05T18:17:31.043 に答える