Rails включают модель отношений в модель - PullRequest
0 голосов
/ 05 июня 2018
class Something
  belongs_to :User
end

class User
  has_many :something
end

Я могу вызвать Something.all и получить массив объектов

[#<Something:0x0000558f81437158
  id: "c2c0506e-57db-4d39-8f5b-20fde15aa1a4",
  user_id:"XXX-XXX">]

Когда я использую Something.includes(:user), я получаю точно такой же результат.У меня сложилось впечатление, что я получаю некоторый включенный пользовательский объект внутри моего объекта что-то.Например, когда я использую Something.all.as_json(includes: :user), я получаю объединенный хэш json.Проблема в том, что я не хочу объединенного хэша JSON.Что-то не так в моих моделях или как работает .includes?

Usecase был бы моим индексным действием, которое автоматически отвечало бы с помощью json, и мне просто нужно было построить правильный хеш объекта без записи as_json повсюду.

Кто-нибудь?

1 Ответ

0 голосов
/ 05 июня 2018

Добавьте следующий гем в ваш Gemfile

gem 'active_model_serializers'

Затем установите его, используя пакет

bundle install

Вы можете сгенерировать сериализатор следующим образом

rails g serializer something
rails g serializer user

itсоздаст файл класса Serializer в

# app/serializers/something_serializer.rb

    class SomethingSerializer < ActiveModel::Serializer
       attributes :id, 

       has_many :users 
    end

# app/serializers/user_serializer.rb
   class UserSerializer < ActiveModel::Serializer
       attributes :id, :name
    end 

В контроллере

def index
  @something = Something.includes(:users).all


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