【发布时间】:2017-07-01 17:01:32
【问题描述】:
我正在尝试从我的联接表“Memberships”中选择所有管理员用户。我只需要从成员资格中选择所有用户,其中组 ID 为 x,成员角色为管理员。
@admins = User.joins(:memberships).where(["memberships.group_id ? and memberships.role ?", @group.id, "admin"])
问题不是试图查看memberships.role,而是说没有users.role 这样的东西。我如何获得这个来寻找会员角色?
SQLite3::SQLException: no such column: users.role: SELECT COUNT(*) FROM "users" INNER JOIN "memberships" ON "users"."id" = "memberships"."user_id" WHERE "memberships"."group_id" = ? AND "users"."role" = ?
架构中的成员资格表:
create_table "memberships", force: :cascade do |t|
t.integer "group_id"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "role", default: 0
t.index ["group_id", "user_id"], name: "index_memberships_on_group_id_and_user_id", unique: true
t.index ["group_id"], name: "index_memberships_on_group_id"
t.index ["user_id"], name: "index_memberships_on_user_id"
end
membership.rb
class Membership < ApplicationRecord
enum role: { member: 0, admin: 1 }
belongs_to :user
belongs_to :group
validates :user_id, presence: true
validates :group_id, presence: true
end
group.rb
class Group < ApplicationRecord
belongs_to :creator, class_name: "User"
has_many :memberships, dependent: :destroy
has_many :users, through: :memberships
user.rb
class User < ApplicationRecord
has_many :created_groups, class_name: "Group"
has_many :memberships, dependent: :destroy
has_many :groups, through: :memberships
【问题讨论】:
-
我在您的
SQL查询中看到COUNT,但ActiveRecord查询表明没有count。这是正确的查询吗? -
是的,这是来自控制器的确切查询。
-
您的查询有问题。试试这个
@admins = User.joins(:memberships).where(["memberships.group_id = ? and memberships.role = ?", @group.id, "admin"]) -
我看到了两个查询之间的区别。不过,我仍然收到该错误。
SQLite3::SQLException: no such column: users.role: SELECT COUNT(*) FROM "users" INNER JOIN "memberships" ON "users"."id" = "memberships"."user_id" WHERE "memberships"."group_id" = ? AND "users"."role" = ? -
好的。我知道了。应该是
@admins = User.joins(:memberships).where("memberships.group_id = ? and memberships.role = ?", @group.id, "admin")。您应该删除[]
标签: ruby-on-rails