加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读