在rails中生成多字引用字段的正确方法是什么

时间:2015-02-16 06:52:37

标签: ruby-on-rails

rails generate model product name:string twoWord:string twoWordRef:references

生成以下迁移文件

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.string :twoWord
      t.references :twoWordRef, index: true

      t.timestamps null: false
    end
    add_foreign_key :products, :twoWordRefs
  end
end

我认为字段名称应该是蛇案例,而不是驼峰案例,但rails generate model在迁移文件中生成驼峰案例字段名称。我想我正在关注我的generate命令的例子。

稍后当我尝试通过引用更新时,我也会发现问题,其中rails认为外键是蛇形的,并且无法在表中找到我的外键。

我做错了什么?感谢

1 个答案:

答案 0 :(得分:10)

Rails自动生成蛇形数据库表。例如,如果您的模型是TestModel,则数据库中的相应表将为test_models。然而,属性并非如此。

请改为:

rails generate model product name:string two_word:string two_word_ref:references

<强>更新

这完全超出了OP所要求的范围,但我认为如果你正在启动Rails,分享这个可能会有所帮助。在命名模型和表时,Rails使用一些约定(如模型的单数名称和表的复数)。为此,它使用ActiveSupport::Inflector模块。

  

Inflector将单词从单数转换为复数,将类名转换为   表名,模块化的类名到没有的名称和类名   到外键。复数的默认变形,   单数化和不可数字保存在inflections.rb。

您可以使用其classifytableize方法验证相应的名称。例如:

"test_models".classify
# => "TestModel"

"TestModel".tableize
# => "test_models"