gpt4 book ai didi

ruby-on-rails - 命名空间模型导致 UndefinedTable 错误

转载 作者:行者123 更新时间:2023-12-03 16:01:39 26 4
gpt4 key购买 nike

我有以下命名空间模型:

# app/models/face_data/pool_membership.rb
class FaceData::PoolMembership < ActiveRecord::Base
self.table_name = 'face_data_pool_memberships'

belongs_to :pool, class_name: 'FaceData::Pool'
belongs_to :photo
end

# app/models/face_data/pool.rb
class FaceData::Pool < ActiveRecord::Base
self.table_name = 'face_data_pools'
end

# app/models/photo.rb
class Photo < ActiveRecord::Base
has_many :pool_memberships, class_name: 'FaceData::PoolMembership'
has_many :pools, through: :pool_memberships, class_name: 'FaceData::Pool'
end

和数据库架构如下:
# db/schema.rb
create_table "face_data_pool_memberships", force: true do |t|
# omitted
end

create_table "face_data_pools", force: true do |t|
# omitted
end

该应用程序运行良好,但在启动(服务器、rake 任务等)时出现以下错误:
 PG::UndefinedTable: ERROR:  relation "pool_memberships" does not exist
LINE 5: WHERE a.attrelid = '"pool_memberships"'::regc...
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"pool_memberships"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum

它只发生在生产环境中(不在开发环境中),并且看起来在运行时没有影响(应用程序继续正常运行 - 生成的查询使用正确的表名)。

注意还有其他 FaceData应用程序中的命名空间模块和类。设置 table_name_prefix明确地为空字符串不会使错误消失。

我的猜测是它与文件的加载顺序或 has_many :through 有关。协会。有小费吗?

最佳答案

为了避免所有这些问题,您可以做一件事。创建 app/models/face_data.rb有了这些内容

    module FaceData
def self.table_name_prefix
'face_data_'
end
end

有了这个,你不再需要写 self.table_name对于您在同一范围内定义的每个类。如果您有任何疑问,请告诉我。

关于ruby-on-rails - 命名空间模型导致 UndefinedTable 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22659744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com