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