Rails正在寻找错误的连接表

时间:2014-04-16 10:33:43

标签: ruby-on-rails

我有两个以相同名称开头的模型:LawFieldLawCategory,并且它们之间存在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开头。但我认为这不是一个问题。

2 个答案:

答案 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_categoriescatalog_products生成的联接表名称为catalog_categories_products

有关详细信息,请参阅has_and_belongs_to_many