PG::Error: 错误: 列 tutorials.tutorialcategory_id 不存在

Posted

技术标签:

【中文标题】PG::Error: 错误: 列 tutorials.tutorialcategory_id 不存在【英文标题】:PG::Error: ERROR: column tutorials.tutorialcategory_id does not exist 【发布时间】:2015-11-18 08:15:34 【问题描述】:

我有两个模型 'Tutorial' 和 'Tutorialcategory'

class Tutorialcategory < ActiveRecord::Base
has_many :tutorials


class Tutorial < ActiveRecord::Base
    belongs_to :tutorialcategory

教程与 html、rubyonrails 等多个类别相关联,其中 html 和 ruby​​ on rails 是教程类别

以下是迁移

class CreateTutorials < ActiveRecord::Migration
  def change
    create_table :tutorials,force: true do |t|
      t.string :title
      t.text :body
      t.integer :rating
      t.string :videoid
      t.belongs_to :tutorialcategory

      t.timestamps
    end
  end
end


class CreateTutorialcategories < ActiveRecord::Migration
  def change
    create_table :tutorialcategories do |t|
      t.string :title

      t.timestamps null:false
    end
  end
end

所有教程都在索引页面上正确列出,但是当我看到类别页面时,它给了我以下错误

PG::Error: ERROR:  column tutorials.tutorialcategory_id does not exist

【问题讨论】:

您是否记得在创建迁移后运行rake db:migrate 是的,我做到了,我可以添加教程。 @Vikram 你检查了this 线程吗?希望能有所帮助。 【参考方案1】:

我不知道您为什么将模型命名为 Tutorialcategory 而不是 TutorialCategory,后者遵循 Rails 命名约定并使其更易于理解。

首先,一步回滚你的数据库

rake db:rollback

将您的迁移文件更改为:

class CreateTutorials < ActiveRecord::Migration
  def change
    create_table :tutorials,force: true do |t|
      t.string :title
      t.text :body
      t.integer :rating
      t.string :videoid
      t.belongs_to :tutorial_category, index: true

      t.timestamps
    end
  end
end


class CreateTutorialCategories < ActiveRecord::Migration
  def change
    create_table :tutorial_categories do |t|
      t.string :title

      t.timestamps null:false
    end
  end
end

再次运行迁移并编辑您的模型以匹配新架构。

class TutorialCategory < ActiveRecord::Base
  has_many :tutorials


class Tutorial < ActiveRecord::Base
  belongs_to :tutorial_category

【讨论】:

是的,他没有使用正确的命名约定,但为什么仍然出错?看起来代码很完美不是吗? @Guru 同意。但是当我们不知道的时候,让我们试试看是否遵循命名约定,因为 Rails 的方式使它工作:convention over configuration 我想我非常接近它,只是不知道如何将多个连接到多个。根据 rails doc belongs_to 是一对多的,但我有很多可以用 has_and_belongs_to_many 完成,但是我将如何获得一个类别的列表教程。 问题是一对多的,代码也显示相同。无论如何,如果您想实现 m2m,请使用 has_many。告诉我你是否卡在任何地方

以上是关于PG::Error: 错误: 列 tutorials.tutorialcategory_id 不存在的主要内容,如果未能解决你的问题,请参考以下文章

错误:pg_repack 失败并出现错误:错误:列“relhasoids”不存在

PG::Error: 错误:关系“用户”不存在

PG::Error: SELECT DISTINCT, ORDER BY 表达式必须出现在选择列表中

尝试部署到 heroku 时出错(按照 ror 教程)PG::Error: ERROR: column "password_digest" of relationship &quo

无法创建没有列错误的表Xamarin SQLite

Rails 报告找不到存在的列