Ruby on rails Rails查询联接问题

Ruby on rails Rails查询联接问题,ruby-on-rails,ruby,model,relationship,Ruby On Rails,Ruby,Model,Relationship,我有一个非常愚蠢的问题,我有两个模型: class User < ApplicationRecord belongs_to :role end 我只是得到了一个“role_id”值的用户,我还尝试了: User.joins(:role) 同样的结果。我一直在看()的官方文件,应该很简单,但我不知道我做错了什么。是否需要向迁移中添加一些内容?在创建用户迁移时,我有: class CreateUsers < ActiveRecord::Migration[6.0] def c

我有一个非常愚蠢的问题,我有两个模型:

class User < ApplicationRecord
  belongs_to :role
end
我只是得到了一个“role_id”值的用户,我还尝试了:

User.joins(:role)
同样的结果。我一直在看()的官方文件,应该很简单,但我不知道我做错了什么。是否需要向迁移中添加一些内容?在创建用户迁移时,我有:

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
class CreateUsers
以及我的create_角色迁移


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

类CreateRoles
本身不会返回这样的自定义数据。您可以使用:

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"}}}]
它本身不会返回这样的自定义数据。您可以使用:

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"}}}]

如果您确实想要JSON输出,那么发布的答案就是最好的选择。如果您只想访问属性,您可以使用
User.includes(:role)。每个{User |…}
和块内的
User.name
User.role.id
、和
User.role.name
。这两种方法都很有效,非常有用,谢谢:)如果您确实想要JSON输出,那么贴出的答案就是正确的选择。如果您只想访问属性,可以使用
User.includes(:role)。每个{User |…}
和块内的
User.name
User.role.id
User.role.name
。这两种方法都很有效,非常有用,谢谢:)
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"}}}]