How to re-name a ActiveRecord Model which can automatically change the table name in DB?

后端 未结 4 1372
野趣味
野趣味 2021-02-04 05:21

I have a Active Record model \"car\", I would like to change the name of this model to \"train\" without changing functionalities inside, that\'s only

相关标签:
4条回答
  • 2021-02-04 05:44

    I figured out the following way:

    1, generate migration file:

    rails generate migration rename_cars_to_trains
    
    1. edit the created migration file to:

      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

    After these steps, the table name changed from cars to trains, then, I have to manually change the controller and views names and the associations...

    If you have any more efficient way, let me know...

    0 讨论(0)
  • 2021-02-04 05:48

    I would recommend the following:

    1. Change manually the Active Record model class into Train

    2. Make migration to change the database table name from cars to trains

    3. Make good search to change references from Car to Train.

    If you have constantly the need to change database table names, you might want to reconsider naming the tables more abstact way. Like in this case you could have table called vehicles and have the "type" field specifying the type (for instance: car or train).

    0 讨论(0)
  • 2021-02-04 05:54

    If you're using RubyMine, go into the model, right click the class name > refactor and change the name. RubyMine will refactor everything and create a new migration for the database as well.

    0 讨论(0)
  • 2021-02-04 06:07

    I used following steps to rename my model

    In sublime text:

    1. press cmd + shift + find and choose case-sensitive search (see left buttons). It will search word in whole project
    2. search and replace 'Cars' to 'Trains'
    3. search and replace 'Car' to 'Train'
    4. search and replace 'car' to 'train'
    5. rails generate migration rename_cars_to_trains
    6. manually change following file names

      • cars_controller
      • car_helper
      • Model/ car.rb
      • all related files in test folder
    7. change folder name in views: cars to trains

    0 讨论(0)
提交回复
热议问题