Проблема с объединением запросов Rails - PullRequest
1 голос
/ 01 мая 2020

У меня действительно тупая проблема, у меня есть две модели:

class User < ApplicationRecord
  belongs_to :role
end

и

class Role < ApplicationRecord
    has_many :user
end

Я пытаюсь получить пользователя и объединить его с таблицей ролей. чтобы получить имя и идентификатор роли, например:

"пользователь": {"имя": "json", "роль": {"имя": "администратор", "идентификатор": 1} }

однако, после использования:

User.includes(:role).all

Я просто получаю пользователей со значением "role_id", я также пытался:

User.joins(:role)

С тот же результат. Я смотрел на официальные документы (https://guides.rubyonrails.org/active_record_querying.html), и это должно быть довольно просто, но я не знаю, что я делаю неправильно. Нужно ли мне что-то добавить в мои миграции ?, В моей миграции create_user у меня есть:

class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :username
      t.string :email
      t.integer :role_id
    end

    add_index :users, :email 
    add_index :users, :username
  end
end

и моя миграция create_roles


class CreateRoles < ActiveRecord::Migration[6.0]
  def change
    create_table :roles do |t|
      t.string :name
    end
  end
end

1 Ответ

0 голосов
/ 01 мая 2020

all само по себе не возвращает такие пользовательские данные. Вы можете использовать as_json для этого:

User.all.as_json(only: :name, include: { role: { only: [:name, :id] } }, root: true)
# User Load (0.5ms)  SELECT "users".* FROM "users"
# Role Load (0.6ms)  SELECT "roles".* FROM "roles" WHERE "roles"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
# => [{"user"=>{"name"=>"json", "role"=>{"id"=>1, "name"=>"admin"}}}]
...