簡體   English   中英

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" = $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM