Как вытащить данные из ассоциативных моделей в сериализованную активную модель? - PullRequest
0 голосов
/ 26 мая 2018

Я использую active_model_serializers gem для отправки ответа как JSON.Я извлекаю данные из моделей ассоциации, но как получить только те данные из таблицы questions, где UserType равно clients.UserType.

ClientSerializer:

class ClientSerializer < ActiveModel::Serializer
  attributes :id, :username, :access_token, :UserType

  has_many :questions, include: :all
end

и QuestionSerializer:

class QuestionSerializer < ActiveModel::Serializer
  attributes :id, :question, :client_id, :UserType
  belongs_to :user
end

здесь вывод: JSON:

{
    "id": 4,
    "username": "171fdkjgku",
    "access_token": "77NVccAJG7hEKSGQUcKkSip5",
    "UserType": 1,
    "questions": [
        {
            "id": 1,
            "question": "Lorem Ipsum",
            "client_id": 4,
            "UserType": 1
        },
        {
            "id": 2,
            "question": "Lorem Ipsum 2",
            "client_id": 4,
            "UserType": 0
        },
        {
            "id": 3,
            "question": "Lorem Ipsum 3",
            "client_id": 4,
            "UserType": 1
        }
    ]
}

Ожидаемый вывод JSON:

{
    "id": 4,
    "username": "171fdkjgku",
    "access_token": "77NVccAJG7hEKSGQUcKkSip5",
    "UserType": 1,
    "questions": [
        {
            "id": 1,
            "question": "Lorem Ipsum",
            "client_id": 4,
            "UserType": 1
        },
        {
            "id": 3,
            "question": "Lorem Ipsum 3",
            "client_id": 4,
            "UserType": 1
        }
    ]
}

1 Ответ

0 голосов
/ 30 мая 2018

Этого можно добиться, определив метод questions самостоятельно и выбрав в нем вопросы с заданными областями:

class ClientSerializer < ActiveModel::Serializer
  attributes :id, :username, :access_token, :UserType, :questions

  def questions
    ques = self.object.questions.where(UserType: self.object.UserType).to_a
    ActiveModel::ArraySerializer.new(ques, each_serializer: QuestionSerializer).as_json
  end
end
...