我在HABTM关系中有两个模型:MaintenanceOrder
和Maintenance
。迁移声明如下
create_table :maintenance_orders do |t|
...
end
create_table :maintenances do |t|
...
end
关于创建连接表,我注意到如果我有:
create_table :maintenances_maintenance_orders, id: false do |t|
t.belongs_to :maintenance, index: true
t.belongs_to :maintenance_order, index: true
end
然后我会收到错误:
I have two models that are similar, and I'm wondering if this is the cause of the error?
@maintenance.maintenances
=> ActiveRecord::StatementInvalid: Could not find table 'maintenance_orders_maintenances'
@maintenance_order.maintenances
=> ActiveRecord::StatementInvalid: Could not find table 'maintenance_orders_maintenances'
然而,如果我有,因为错误表明这样的连接表:
create_table :maintenance_orders_maintenances, id: false do |t|
t.belongs_to :maintenance_order, index: true
t.belongs_to :maintenance, index: true
end
一切正常。但我问这个问题是因为据我所知,根据HABTM的定义,模型的声明顺序无关紧要。所以...这只是因为名字是如此相似而且我需要以这种方式做一个蛇案例(就像可能让maintenances_maintenance
过分混淆)或者......?关于这个的任何规则?
答案 0 :(得分:1)
默认情况下,Rails在连接表名称中按字母顺序排序表名。 maintenance_order
出现在maintenances
之前,因此:maintenance_orders_maintenances
是rails希望命名表的内容。有关详细信息,请参阅http://edgeguides.rubyonrails.org/active_record_migrations.html#creating-a-join-table。
如果您偏离Rails的期望,您可以自己配置表名,但最好遵循标准命名程序。
请注意,阅读所有Rails指南非常值得您花时间阅读 - 这样就可以很好地提升您的导航知识。