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认为外键是蛇形的,并且无法在表中找到我的外键。
我做错了什么?感谢
答案 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。
您可以使用其classify和tableize方法验证相应的名称。例如:
"test_models".classify
# => "TestModel"
"TestModel".tableize
# => "test_models"