Ruby on Rails中的一次更改模型属性(列名)
我创建了一个具有属性“name”的模型,但我想将其更改为“username”。 我读过的关于数据库迁移的所有内容都涉及创建一个类或一些复杂的东西。 我想要做的只是SQL中的“UPDATE TABLE”。 如何运行一次性数据库迁移来更改此设置? 我猜它涉及rails控制台,然后是一些命令?
第一:
rails g migration rename_name_column_to_username
然后在生成的rename_name_column_to_username.rb迁移文件中:
class RenameNameColumnToUsername < ActiveRecord::Migration def self.up rename_column :users, :name, :username end def self.down rename_column :users, :username, :name end end
然后rake db:migrate
如果您尚未提交最初创建“名称”列的代码,则只需转到创建该列的旧迁移文件并将name
更改为username
,然后重新生成模式。
但是,如果您已提交代码,则应创建一个单独的迁移文件,将name
重name
为username
。
这对于跟踪数据库的版本控制非常重要。 因此,您永远不应该真正使用手动SQL(ALTER TABLE …)来更改架构。
运行rails g migration RenameNameToUsername
,它将在db/migrate
创建一个新文件。
打开该文件,并将其添加到self.up
部分:
rename_column :tablename, :name, :username
然后运行rake db:migrate
- 使用CanCan进行上下文感知授权
- 成功进行DEVISE登录后,如何将用户重定向回以前需要登录的操作?
- jruby on rails – 使用star server(rails s)命令时出错
- 如何重命名列并通过迁移同时更改其类型
- rails生成rspec:install config / environments / development.rb:1:在`’:undefined method`configure’
- ProtocolViolation:ERROR:绑定消息提供0个参数,但是准备好的语句“”需要1
- Postgres使用CSV数据从变量复制
- 如何避免在生成的URL中添加默认语言环境?
- 如何获取数据库中的原始’created_at’值(不是转换为ActiveSupport :: TimeWithZone的对象)