如何重命名ActiveRecord模型,该模型可以自动更改DB中的表名?

时间:2011-01-28 09:57:37

标签: ruby-on-rails ruby-on-rails-3

我有一个Active Record模型“car”,我想将此模型的名称更改为“训练”而不更改内部功能,更改名称。此外,表名应更改为“train”。

是否有任何rails命令可以在onece上执行此操作?或者我必须手动更改类或迁移中的名称?如果我必须手动更换,那将会很复杂,因为我还必须更改与我的“汽车”模型有关联的其他模型。

有什么好的建议吗?

4 个答案:

答案 0 :(得分:31)

我想出了以下方法:

1,生成迁移文件:

rails generate migration rename_cars_to_trains
  1. 将创建的迁移文件编辑为:

    class RenameCarsToTrains < ActiveRecord::Migration
      def self.up
        rename_table :cars, :trains
      end
    
      def self.down
        rename_table :trains, :cars
      end
    end
    
  2. rake db:migrate

  3. 完成这些步骤后,表名从汽车变为火车,然后,我必须手动更改控制器并查看名称和关联......

    如果您有更有效的方式,请告诉我......

答案 1 :(得分:18)

我会推荐以下内容:

1)将Active Record模型类手动更改为Train

2)进行迁移以将数据库表名称从汽车更改为火车

3)进行良好的搜索以更改从Car到Train的引用。

如果您经常需要更改数据库表名称,则可能需要重新考虑以更抽象的方式命名表。就像在这种情况下你可以有一个叫做车辆的表,并有“type”字段指定类型(例如:汽车或火车)。

答案 2 :(得分:3)

我使用以下步骤重命名我的模型

在崇高的文字中:

  1. 按cmd + shift + find并选择区分大小写的搜索(请参阅左侧按钮)。它将在整个项目中搜索单词
  2. 搜索并将'Cars'替换为'Trains'
  3. 搜索并将'Car'替换为'Train'
  4. 搜索并将'car'替换为'train'
  5. rails生成迁移rename_cars_to_trains
  6. 手动更改以下文件名

    • cars_controller
    • car_helper
    • Model / car.rb
    • 测试文件夹中的所有相关文件
  7. 更改视图中的文件夹名称:汽车到火车

答案 3 :(得分:0)

如果您使用的是RubyMine,请进入模型,右键单击类名称>重构并更改名称。 RubyMine将重构所有内容,并为数据库创建新的迁移。