Рельсовые объектные отношения и рендеринг JSON - PullRequest
3 голосов
/ 27 декабря 2011

Я уже знаю, как включить отношения has_many & has_one в мой рендеринг JSON. Я даже знаю, как исключить определенные атрибуты при этом. Для тех, кто не знает, вот хороший пост:

Объектные отношения Rails и рендеринг JSON

Однако, что я не знаю, как это сделать, это использовать as_json для дочернего объекта, поэтому мне не нужно повторно объявлять его при каждом родительском отношении.

Так что, если у меня есть что-то вроде этого ...

class Customer < ActiveRecord::Base
  has_many :orders

  def as_json(options={ })
    super({ :except => :Password, :include => [:orders] }.merge(options))
  end
end

class Order < ActiveRecord::Base
  has_one :customer

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

В конечном итоге отправляется пароль клиента при просмотре его с точки зрения заказа.

В идеале я бы хотел, чтобы он следовал правилам as_json, определенным в модели, поэтому мне не нужно вставлять исключения для включения: customer в каждый дочерний объект.

P.S. - Это всего лишь пример, а не сценарий реального мира.

1 Ответ

2 голосов
/ 28 декабря 2011

Я бы посоветовал вам использовать гем RABL против переопределения as_json для всех ваших моделей.Намного легче определить ваши ответы JSON, используя только те параметры / отношения, которые вы хотите.Вы также можете легко создать родительское / дочернее вложение.

https://github.com/nesquena/rabl

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