Контекстно-зависимый ответ JSON - PullRequest
1 голос
/ 10 января 2012

Я создаю серверную часть rails 3, которая состоит из контроллеров RESTful json.Например, контроллеры выглядят примерно так:

respond_to :json

def index
  ...
  respond_with resources
end

...

Это используется jQuery на клиенте.Все работает отлично.

Мой следующий шаг - управление JSON, чтобы некоторые свойства не сериализовались в зависимости от контекста.Например, владелец ресурса получает больше свойств, чем тот, у кого есть только права на чтение.

В настоящее время я стремлюсь к Draper и использую отдельные декораторы для каждой модели в зависимости от роли пользователя.

Моя проблема в том, что это порождает много шаблонов.В настоящее время я также использую cancan для авторизации на основе ролей.

Может кто-нибудь предложить лучший метод для этого?

1 Ответ

1 голос
/ 10 января 2012

Я рекомендую использовать ActiveModel :: Serializer. Смотри https://github.com/josevalim/active_model_serializers

Создайте сериализатор для каждого ресурса, который вы хотите предоставить. Затем вы можете отделить логику сериализации для каждой модели, легко представить другие методы и охватить каждую модель на основе ролей. Хорошо работает с CanCan.

Мне нравится этот синтаксис, например:

class MonkeySerializer < ActiveModel::Serializer
  attributes :name, :mom, :weight

  private

  # use this for a custom attribute not on the model
  def weight
    monkey.weight_in_pounds
  end    
end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...