我有两个以相同名称开头的模型:LawField
和LawCategory
,并且它们之间存在habtm
- 关联。我通过rails g migration CreateLawCategoriesLawFieldsJoinTable law_categories law_fields
创建了连接表。迁移看起来像这样:
class CreateLawCategoriesLawFieldsJoinTable < ActiveRecord::Migration
def change
create_join_table :law_categories, :law_fields do |t|
# t.index [:law_category_id, :law_field_id]
# t.index [:law_field_id, :law_category_id]
end
end
end
当我在law_fields
对象上调用LawCategory
方法时(反之亦然),我收到错误消息:
找不到表&#39; law_categories_fields&#39;
为什么rails期待这个名字? (注意单词law_
之前缺少fields
)我应该这样命名表吗?为什么?我认为这是因为模型名称都以law
开头。但我认为这不是一个问题。
答案 0 :(得分:3)
我应该这样命名表吗?
是的,它是documented:
如果您的表共享一个公共前缀,它只会出现一次 开始。例如,表“catalog_categories”和 “catalog_products”生成连接表名称 “catalog_categories_products”。
为什么?
我不知道。因为它变短了吗?因为听起来更自然吗?
答案 1 :(得分:2)
你的Join表应该有这样的名字
law_categories_fields
您的迁移文件应如下所示
class CreateLawCategoriesFieldsJoinTable < ActiveRecord::Migration
def change
create_table :law_categories_fields do |t|
t.integer :law_category_id
t.integer :law_field_id
end
end
end
例如,表格catalog_categories
和catalog_products
生成的联接表名称为catalog_categories_products
。
有关详细信息,请参阅has_and_belongs_to_many。