Rails 5:查找属于current_user的公司的所有用户
Rails 5: find all Users who belong to Companies, which belong to current_user
在我的应用程序中,用户可以拥有许多公司,反之亦然。在帐户 table 中存储了用户 ID 和公司 ID。
我想找到属于 current_user 的公司的所有用户。 让我们假设 current_user 就像主用户(不是管理员,那样会是这些公司的系统管理员)。
我该怎么做呢?我的猜测是用 Arel 来做,但它在模型、控制器、视图中应该如何显示?非常感谢您的帮助。我在 Rails 5.
models/user.rb
class User < ApplicationRecord
has_many :accounts, dependent: :destroy
has_many :companies, through: :accounts
models/account.rb
class Account < ApplicationRecord
belongs_to :company
belongs_to :user
accepts_nested_attributes_for :company, :user
models/company.rb
class Company < ApplicationRecord
has_many :accounts, dependent: :destroy
has_many :users, through: :accounts
accepts_nested_attributes_for :accounts, :users
我的 schema.rb 看起来像这样:
create_table "accounts", force: :cascade do |t|
t.integer "company_id"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["company_id"], name: "index_accounts_on_company_id"
t.index ["user_id"], name: "index_accounts_on_user_id"
end
create_table "companies", force: :cascade do |t|
t.string "name"
t.string "legal_name"
t.string "reg_number"
t.string "address"
t.string "bank_acc"
t.string "description"
t.string "website"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "role", default: 0
t.integer "currency", default: 0
end
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "password_digest"
t.string "remember_digest"
t.boolean "admin", default: false
t.index ["email"], name: "index_users_on_email", unique: true
end
您可以找到当前用户的公司,并预先加载属于这些公司的用户
@companies = current_user.companies.includes(:users)
要列出所有用户(可能在视图中),遍历 @companies
及其所有 users
@companies.each do |company|
company.users.each do |user|
puts user.name
end
end
或使用map/collect将它们分配给一个变量。
@users = @companies.map(&:users).flatten
在我的应用程序中,用户可以拥有许多公司,反之亦然。在帐户 table 中存储了用户 ID 和公司 ID。 我想找到属于 current_user 的公司的所有用户。 让我们假设 current_user 就像主用户(不是管理员,那样会是这些公司的系统管理员)。 我该怎么做呢?我的猜测是用 Arel 来做,但它在模型、控制器、视图中应该如何显示?非常感谢您的帮助。我在 Rails 5.
models/user.rb
class User < ApplicationRecord
has_many :accounts, dependent: :destroy
has_many :companies, through: :accounts
models/account.rb
class Account < ApplicationRecord
belongs_to :company
belongs_to :user
accepts_nested_attributes_for :company, :user
models/company.rb
class Company < ApplicationRecord
has_many :accounts, dependent: :destroy
has_many :users, through: :accounts
accepts_nested_attributes_for :accounts, :users
我的 schema.rb 看起来像这样:
create_table "accounts", force: :cascade do |t|
t.integer "company_id"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["company_id"], name: "index_accounts_on_company_id"
t.index ["user_id"], name: "index_accounts_on_user_id"
end
create_table "companies", force: :cascade do |t|
t.string "name"
t.string "legal_name"
t.string "reg_number"
t.string "address"
t.string "bank_acc"
t.string "description"
t.string "website"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "role", default: 0
t.integer "currency", default: 0
end
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "password_digest"
t.string "remember_digest"
t.boolean "admin", default: false
t.index ["email"], name: "index_users_on_email", unique: true
end
您可以找到当前用户的公司,并预先加载属于这些公司的用户
@companies = current_user.companies.includes(:users)
要列出所有用户(可能在视图中),遍历 @companies
及其所有 users
@companies.each do |company|
company.users.each do |user|
puts user.name
end
end
或使用map/collect将它们分配给一个变量。
@users = @companies.map(&:users).flatten