Rails has_many 通过命名空间模型缺少列 id
Rails has_many through missing column id with namespaced models
我确定我在这里做了一些愚蠢的事情,但它并没有打击我。
# models/admin/host.rb
class Admin::Host < ApplicationRecord
has_many :admin_host_users, class_name: 'Admin::HostUser'
has_many :users, through: :admin_host_users
# models/user.rb
class User < ApplicationRecord
has_many :admin_host_users, class_name: 'Admin::HostUser'
has_many :admin_hosts, through: :admin_host_users
# models/admin/host_user.rb
class Admin::HostUser < ApplicationRecord
belongs_to :admin_host, class_name: 'Admin::Host', foreign_key: 'admin_host_id'
belongs_to :user
# schema.rb
create_table "admin_host_users", id: false, force: :cascade do |t|
t.bigint "admin_host_id"
t.bigint "user_id"
end
调用时host.users
:
> h.users
Traceback (most recent call last):
ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column admin_host_users.host_id does not exist)
LINE 1: ..."users"."id" = "admin_host_users"."user_id" WHERE "admin_hos...
^
: SELECT "users".* FROM "users" INNER JOIN "admin_host_users" ON "users"."id" = "admin_host_users"."user_id" WHERE "admin_host_users"."host_id" = LIMIT
关于为什么期望列名称是 host_id
的任何想法?
您需要在 has_many
关联中指定 foreign_key
。
因此,在您的 Admin::Host
模型中:
has_many :admin_host_users, class_name: 'Admin::HostUser', foreign_key: 'admin_host_id'
同时将 foreign_key 保留在 Admin::HostUser
模型中,因为当您执行 host_user.admin_host
之类的操作时将使用它
我确定我在这里做了一些愚蠢的事情,但它并没有打击我。
# models/admin/host.rb
class Admin::Host < ApplicationRecord
has_many :admin_host_users, class_name: 'Admin::HostUser'
has_many :users, through: :admin_host_users
# models/user.rb
class User < ApplicationRecord
has_many :admin_host_users, class_name: 'Admin::HostUser'
has_many :admin_hosts, through: :admin_host_users
# models/admin/host_user.rb
class Admin::HostUser < ApplicationRecord
belongs_to :admin_host, class_name: 'Admin::Host', foreign_key: 'admin_host_id'
belongs_to :user
# schema.rb
create_table "admin_host_users", id: false, force: :cascade do |t|
t.bigint "admin_host_id"
t.bigint "user_id"
end
调用时host.users
:
> h.users
Traceback (most recent call last):
ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column admin_host_users.host_id does not exist)
LINE 1: ..."users"."id" = "admin_host_users"."user_id" WHERE "admin_hos...
^
: SELECT "users".* FROM "users" INNER JOIN "admin_host_users" ON "users"."id" = "admin_host_users"."user_id" WHERE "admin_host_users"."host_id" = LIMIT
关于为什么期望列名称是 host_id
的任何想法?
您需要在 has_many
关联中指定 foreign_key
。
因此,在您的 Admin::Host
模型中:
has_many :admin_host_users, class_name: 'Admin::HostUser', foreign_key: 'admin_host_id'
同时将 foreign_key 保留在 Admin::HostUser
模型中,因为当您执行 host_user.admin_host