Почему мои ассоциации не отображаются в JSON? - PullRequest
2 голосов
/ 07 июля 2011

Я пытаюсь управлять рендерингом JSON пользовательского объекта в Rails 3.0.2. Вот соответствующий код модели:

class User < ActiveRecord::Base

  belongs_to :employer
  has_and_belongs_to_many :roles

  def as_json(options={}) 
    super(options.merge(:include => [:employer, :roles])) 
  end
end

Вот JSON-представление, которое я получаю:

{"user":{"employer":{},"roles":[{},{},{}],"email":"user.user@example.com"}}

Этот пользователь имеет три роли, поэтому оператор :include каким-то образом ищет связь, но объекты роли и работодателя не преобразуются в JSON.

Если бы у меня была as_json для любой из этих моделей, возвращая мусор, он все равно не появляется.

Я что-то не так делаю, или это ошибка? (Он ничего не рендерил для ассоциаций, пока я не обновил Rails 3.0.0, что я научился делать из этого вопроса .)

Ответы [ 2 ]

5 голосов
/ 07 июля 2011

Вы можете попробовать: to_json(:include => [:employer, :roles]) вместо as_json

http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html

3 голосов
/ 07 июля 2011

Мой обходной путь

Я до сих пор не уверен, почему это не сработало, но мой обходной путь - построить представление, которое я хотел вручную.

  def serializable_hash(options={}) 
    hash_info = super(options) 
    hash_info[:employer] = {:name => employer.name}
    hash_info[:roles] = roles
    hash_info
  end

Я использую serializable_hash, потому что это более универсальный метод, из которого Rails может генерировать JSON или XML или что-то еще Но метод работает так же, если вы измените имя на as_json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...