Answers:
这是我会做的:
创建一个迁移以更改表名称(数据库级别)。我认为你的旧桌子叫军团。迁移内容将是:
class RenameCorpsToStores < ActiveRecord::Migration
def change
rename_table :corps, :stores
end
end
更改您的模型文件名,模型类定义和模型关联:
corp.rb
->store.rb
store.rb
:更改class Corp
为class Store
has_many :corps
->has_many :stores
更改您的控制器文件名和控制器类定义:
corps_controller.rb
->stores_controller.rb
stores_controller.rb
:更改class CorpsController
为class StoresController
重命名视图文件夹。从corps
到stores
。
在config/routes.rb
文件的路径中进行必要的更改,例如resources :corps
-> resources :stores
,并确保代码中的所有引用都从corps更改为store(corps_path,...)
记住要运行迁移:)
如果以前不可能,请尝试删除db / schema.rb并执行:
$ rake db:drop db:create db:migrate
find -name "oldname_on_singular?*
以获取要重命名的文件列表。然后我将其复制到calc上,在第二列和第三列上粘贴两次。在第一列中添加重命名命令,在最后一列中更改新名称,例如:git mv ./spec/views/oldname ./spec/views/new name
除了大雄回答你同样需要改变测试和辅助类的定义和文件名称为corps
至store
。 更重要的是,您应该在config / routes.rb文件中更改corps
为store
因此,总的来说,您将对Controller,关联的Model,Views,Helpers,Tests和Routes文件进行更改。
我认为您看到的关于destroy
&的建议generate
是更好的选择。我在这里给出了如何执行此操作的答案:Rails:重命名控制器和相应的模型
您也可以尝试使用Rails Refactor gem,它是用于简单重构的命令行工具,例如重命名模型和Rails项目的控制器。
用法:
Rails项目的基本重命名和重构。尽管这些方法并不完美,但它们会为您完成很多工作并节省您的时间。
在使用之前,建议您从一个干净的存储库状态开始,以便您可以轻松地查看更改。
安装:
gem install rails_refactor
在使用之前,请确保CD到rails项目的根目录。
重命名控制器:
rails_refactor rename OldController NewController
- 重命名控制器文件和文件中的类名
- 重命名控制器规范文件和文件中的类名
- 重命名视图目录
- 重命名帮助文件和模块中的模块名称
- 更新路线
要重命名控制器动作:
$ rails_refactor rename DummyController.old_action new_action
- 重命名控制器类文件中的控制器动作
- 重命名所有格式的视图文件
重命名模型:
$ rails_refactor rename OldModel NewModel
- 重命名模型文件和文件中的类名
- 重命名规范文件和文件中的类名
- 重命名文件中的迁移,类名和表名
...
除了Nobita的答案(如果我有足够的代表,我会对此进行评论),如果您感觉很勇敢,则可以对代码中的文件名和模型引用进行自动更改。例如,要更改代码中的引用,您可以使用
单数,负数和五月形:
grep -rl corp | xargs sed -i 's/corp/store/g'
grep -rl Corp | xargs sed -i 's/Corp/Store/g'
复数,减号和Mayus(如果只需要复数和末尾的s字符,则单数替换复数):
grep -rl corps | xargs sed -i 's/corps/stores/g'
grep -rl Corps | xargs sed -i 's/Corps/Stores/g'
重命名文件:
find . -name '*corp*' -exec bash -c 'mv $0 ${0/corp/store}' {} \;
在某些* nix版本(包括Slackware)上,有一个名为重命名的实用程序,它将帮助您重命名文件:
shopt -s globstar
rename -v corps stores app/**/*corps* config/**/*corps* test/**/*corps*
检查重命名是否符合您的想法,我知道其他发行版(如Ubuntu)附带相同名称的其他实用程序(请参阅/unix/78621/find-rename-command-不起作用)。在Ubuntu上,您可以这样做:
shopt -s globstar
rename -v 's/corps/stores/' app/**/*corps* config/**/*corps* test/**/*corps*
请注意,您要避免重命名db /中的任何文件(可能不在您的seed.rb文件中),因此您可能希望排除该目录并手动进行任何更改。
另一个重要的事情是您需要更新模型关联,无论是手动重命名还是销毁并生成资源(由于它们存在于其他模型中),都必须这样做。您可以运行迁移来更改数据库中外键的列名,并在代码中更改对那些外键的所有引用:
rename_column :table, :old_id, :new_id
或在声明使用旧外键的关联时设置自定义外键:
belongs_to :new, foreign_key: "old_id"
另外,如果您的资源包含图片,它们通常会存储在包含资源名称的目录中,但是(至少带有载波)一旦更改资源名称,它们将被错误引用(文件位于'/ uploads / old / image / 1 / pic.jpg”,但要查找“ uploads / new / ...”),因此您必须删除并重新上传图像,将其移动到新路径,或者更改它们的位置。正在寻找。
作为刚刚完成此痛苦过程的人,最重要的一步是构建足够的TESTS以检查尽可能多的功能。它们不仅应涵盖您计划重命名的模型/控制器,还应涵盖所有其他模型/控制器/视图部件。无论如何,这是一个好的(甚至是必须的)实践。
逐步执行此步骤,有时您需要返回几次(5次或更多次)以发现需要更改的其他文件。现在进行重命名步骤:
Corps/Corp
以Stores/Store
在db/migrate
文件夹中尝试运行:
耙db:drop:all
耙db:create
耙db:migrate
更改db/seeds.rb
文件内容。
rake db:seed --trace
在此步骤中,您可能需要更改其他一些模型/控制器文件。)test/fixtures
文件。您可能不仅需要更改corps.yml,还需要更改其他相关文件(某些文件可能包含corp_id)。TESTOPTS="--seed=1981"
或任何其他数字)运行它