2
私の結合テーブル "Memberships"からすべての管理ユーザーを選択しようとしています。グループIDがxで、メンバーシップの役割がadminのメンバーシップからすべてのユーザーを選択するだけで済みます。SQLException:このような列には、多数の結合があります。
@admins = User.joins(:memberships).where(["memberships.group_id ? and memberships.role ?", @group.id, "admin"])
問題はmembership.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
だが、 'ActiveRecord'クエリが' count'はありません示唆しています。それは正しいクエリですか? – Pavan
はい、コントローラからの正確なクエリです。 – ddonche
質問に正しいものがありません。この「@admins = User.joins(:memberships).where(["memberships.group_id =?and memberships.role =?"、@ group.id、 "admin"]) ' – Pavan