sql - 使用 has_many 的关联命令:通过 Ruby on Rails 中的关联
问题描述
我有一个has_many :through
协会。
#app/user.rb
class User < ApplicationRecord
has_many :members
has_many :projects, :through => :members
end
#app/project.rb
class Project < ApplicationRecord
has_many :members
has_many :users, :through => :members
end
#app/member.rb
class Member < ApplicationRecord
belongs_to :user
belongs_to :project
end
我的数据库架构如下:
create_table "members", force: :cascade do |t|
t.integer "user_id"
t.integer "project_id"
t.integer "is_owner"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["project_id"], name: "index_members_on_project_id"
t.index ["user_id"], name: "index_members_on_user_id"
end
create_table "projects", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "users", force: :cascade do |t|
t.string "first_name"
t.string "last_name"
t.string "email"
t.string "password_digest"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
使用命令时可以获取 Member ID、User_ID、Project_ID 和 is_owner@project.members
使用命令时可以获取 user_id、first_name、last_name、email 和 password@project.users
我应该使用什么命令来获取 member_id、first_name、last_name?
我可以使用 SQL 查询得到我想要的,SELECT * FROM members INNER JOIN users ON users.id = members.user_id
但我不想使用原始 SQL。
有人能告诉我如何将该查询转换为 Ruby on rails 命令吗?
解决方案
您可以使用以下代码获得所需的结果
Member.joins(:user)
它将生成您在问题中指定的相同查询,即
SELECT * FROM members INNER JOIN users ON users.id = members.user_id
推荐阅读
- sql - Django中具有分组的多个聚合
- regex - 提取 [a, b, c] 中的数据并用逗号分隔它们
- java - 如何将这个 BigInteger 解决为“java.lang.Long”问题?
- sqlite - 不使用 Flutter 的 SQFlite 关闭数据库?
- javascript - 为什么这个脚本在外部 js 文件中不起作用?
- powershell - 在多个函数之间使用哈希表给了我 System.Collections.Hashtable
- dns - 如何在启用 Cloudflare 的情况下切换托管服务提供商?
- python - 仅在 Python 的 OpenCV 轨迹栏上出现奇数?
- python - 如何解决硒网络驱动程序的问题?
- c# - 使用 .NET Web 表单使用 AMP 获取表单操作错误