如何将此迁移转换为原始 sql?或者我可以转换吗?
class AddUnsubscribeTokenToUsers < ActiveRecord::Migration
def self.up
add_column :users, :unsubscribe_token, :string, :unique => true
User.all.each do |user|
user.unsubscribe_token = ActiveSupport::SecureRandom.hex(18)
end
end
def self.down
remove_column :users, :unsubscribe_token
end
end
Run Code Online (Sandbox Code Playgroud)
据我所知,您无法将单个迁移转换为 SQL,但您可以让 ActiveRecord 以 SQL 而不是 Ruby 输出您的架构。
# in config/application.rb
config.active_record.schema_format = :sql
Run Code Online (Sandbox Code Playgroud)
这将为您提供数据库/模式中的 SQL 输出,而不是 Ruby DSL。但这两种格式都不会包含设置用户令牌的代码片段。
此外,在迁移中包含类似的数据库修改代码被认为是一个坏主意。例如,如果您删除或重命名模型会发生什么,当迁移运行时它将失败。至少把它包装在模型的支票中。或开始/救援/结束
if defined? User
User.all.each do |user|
user.unsubscribe_token = ActiveSupport::SecureRandom.hex(18)
end
end
Run Code Online (Sandbox Code Playgroud)
或者
begin
User.all.each do |user|
user.unsubscribe_token = ActiveSupport::SecureRandom.hex(18)
end
rescue
end
Run Code Online (Sandbox Code Playgroud)
最后,该代码片段不会执行您的预期,因为您在设置令牌后没有保存模型,使用update_attributes或调用user.save
| 归档时间: |
|
| 查看次数: |
4530 次 |
| 最近记录: |