Rails迁移引用的名称约定

时间:2017-11-15 00:25:04

标签: ruby-on-rails ruby postgresql migration generator

我在通过rails生成器创建数据库表时遇到问题。

我将一个表名为personal_data并且工作正常。

class CreatePersonalData < ActiveRecord::Migration
 def change
  create_table :personal_data do |t|
    t.string :name
    t.string :lastName
    t.string :dni
    t.string :contact
    t.references :user, index: true, foreign_key: true

    t.timestamps null: false
  end
 end
end

但我创建了另一个表,其中引用了个人数据

class CreateMerchants < ActiveRecord::Migration
 def change
  create_table :merchants do |t|
    t.string :storeName
    t.references :personal_data, index: true, foreign_key: true
    t.references :category, index: true, foreign_key: true
    t.string :webPage
    t.string :city

    t.timestamps null: false
  end
 end
end

当运行迁移而不是寻找personal_data_id时,迁移会查找personal_datum_id并抛出异常。

  

PG :: UndefinedColumn:ERROR:no existe la columna«personal_datum_id»referida en lallaveforánea   :ALTER TABLE“商家”添加约束“fk_rails_e4239c30dc”   FOREIGN KEY(“personal_datum_id”)     参考“personal_data”(“id”)

我将错误翻译成英文

  外键约束中引用的

列“personal_datum_id”不存在

2 个答案:

答案 0 :(得分:1)

我不确定为什么会感到困惑,但也许你可以设置你的变形,以便复数的personal_data是personal_data?

在文件中:config / initializers / inflections.rb

ActiveSupport::Inflector.inflections do |inflect|
    inflect.irregular 'personal_data', 'personal_data'
end

答案 1 :(得分:1)

在您的personal_data.rb模型中添加self.table_name = 'personal_data'并运行迁移