[英]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" = $1 LIMIT $2
關於為什么期望列名是host_id
的任何想法?
您需要在has_many
關聯中指定foreign_key
。
因此,在您的Admin::Host
model 中:
has_many :admin_host_users, class_name: 'Admin::HostUser', foreign_key: 'admin_host_id'
還要將 foreign_key 保留在Admin::HostUser
model 中,因為當您執行類似host_user.admin_host
類的操作時將使用它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.