ruby-on-rails – 继续使用命名空间模型获取PG :: UndefinedTabl
发布时间:2020-12-17 02:23:29 所属栏目:百科 来源:网络整理
导读:我有一些使用命名空间设置的模型.. rails g model Technology::Post ... 这导致了错误 PG::UndefinedTable: ERROR: relation "posts" does not existLINE 5: WHERE a.attrelid = '"posts"'::regclass :SELECT a.attname,format_type(a.atttypid,a.atttypmod)
我有一些使用命名空间设置的模型..
rails g model Technology::Post ... 这导致了错误 PG::UndefinedTable: ERROR: relation "posts" does not exist LINE 5: WHERE a.attrelid = '"posts"'::regclass :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 = '"posts"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum 由于这些是命名空间,我有一个模型技术.rb module Technology def self.table_name_prefix 'technology_' end end 当然还有Technology :: Post模型.此模型采用文件夹技术,名为post.rb. class Technology::Post < ActiveRecord::Base ... end 我的数据库名称是technology_posts. public | technology_posts | table | postgres 但出于某种原因,它正在寻找一个桌面帖子.在控制器中,我可以只有一个基本的@posts = Technology :: Post.all,这仍然会发生. 重新启动服务器将解决问题,直到它再次发生.这在我们的生产环境中也不是问题.只有发展. 解决方法
有三件事正在发生.
首先,请确保您拥有最新版本的pg gem. Udit的答案,设置表名,可能会起作用.但这是一种解决方法.我相信问题的原因以及开箱即用的原因如下: 生成命名空间模型时,Rails会创建如下模块文件: module Technology def self.table_name_prefix 'technology_' end end 但是,如果您在其他地方定义常量/模块“技术”,Rails可能无法自动加载此文件!您可以通过在文件顶部放置一些调试放置来进行测试. 解决方案是确保通过明确要求加载此模块,或将其转移到模型.例如, module Technology def self.table_name_prefix 'technology_' end class Post < ActiveRecord::Base ... end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |