首页 > 解决方案 > 使用 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 命令吗?

标签: sqlruby-on-railsruby

解决方案


您可以使用以下代码获得所需的结果

Member.joins(:user)

它将生成您在问题中指定的相同查询,即

SELECT * FROM members INNER JOIN users ON users.id = members.user_id

推荐阅读