Включение тегов acts_as_taggable_on в вывод модели to_json - PullRequest
1 голос
/ 19 февраля 2012

Я использую act_as_taggable_on в моем приложении rails.Я хотел бы, чтобы эти теги отображались в представлении to_json моей модели.

Например, to_json одного экземпляра моей модели выглядит так:

{"created_at":"2012-02-19T03:28:26Z",
 "description":"Please!",
 "id":7,
 "points":50,
 "title":"Retweet this message to your 500+ followers",
 "updated_at":"2012-02-19T03:28:26Z"}

... и мне бы хотелось, чтобы это выглядело примерно так:

{"created_at":"2012-02-19T03:28:26Z",
 "description":"Please!",
 "id":7,
 "points":50,
 "title":"Retweet this message to your 500+ followers",
 "updated_at":"2012-02-19T03:28:26Z"
 "tags" : 
     {"id":1,
      "name":"retweet"},
     {"id":2,
      "name":"twitter"},
     {"id":3,
      "name":"social"}
 }

Мой код контроллера - это просто значение по умолчанию, которое скаффолдинг дает мне:

def show
  @favor = Favor.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @favor }
  end
end

Обратите внимание, что я уже могу получить доступ к @ fav.tags в шаблоне, и @ fav.tags.to_json работает как положенопросто нужно, чтобы эти данные были включены при выводе @ fav.to_json.

Ответы [ 2 ]

3 голосов
/ 19 февраля 2012

Вы можете передать параметры в вызов json, позвонив по номеру to_json.Или переопределив as_json в вашей модели предпочтения.

render json: @favor.to_json(include: :tags)

2 голосов
/ 21 февраля 2012

В вашу пользу метод переопределения модели as_json .

def as_json(options={})
  super(:include => :tags)
end
...