mysql - 将新字段添加到预先存在的表中并修改先前在 Rails 中创建的数据

标签 mysql ruby-on-rails sqlite migration

所以我有一个用户模型和一个相应的表(用户),其中包含以下字段:User_id、用户名、密码等。

但后来我将invitation_limit 添加到用户表中。新创建的用户具有invitation_limit,但是在运行invitation_token 迁移之前创建的用户没有invitation_limit 字段。

如何更新之前创建的用户以包含invitation_token 字段?请注意,我不是在谈论向用户表添加invitation_limit 字段(即迁移),而是更新已创建的用户。

谢谢

最佳答案

不应将种子数据放入迁移中。迁移是为了创建结构,而不是添加数据,如果移动数据库,您就会遇到问题。

您可以编写一个 rake 任务。如果您创建一个名为“generate_invitation_token”的实例方法,则可以编写如下的 rake 任务:

# lib/tasks/invitation_tokens.rake
namespace :seed do
  desc "generate invitation tokens for users that don't have one already"
  task :user_tokens => :environment do
    User.all(:conditions => {:invitation_token => nil}).each do |user|
      user.generate_invitation_token
    end
  end
end

然后您可以从命令行调用 rake 任务,如下所示:

rake seed:user_tokens

这是一种更简洁的方法。

更新

我在一篇名为“Adding Columns and Default Data To Existing Models”的博文中扩展了这个答案。

关于mysql - 将新字段添加到预先存在的表中并修改先前在 Rails 中创建的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2130702/

相关文章:

mysql - 多对多关系mysql选择

mysql - 如何在云端托管一个sql数据库?

css - stylesheet_link_tag 或 @import

mysql - 如何在MySQL中克服 "Result consisted more than one row"

java - 我认为我没有正确关闭连接 - Java

ruby-on-rails - 如何使用现有的 SQL 数据库将我的 Rails 应用程序部署到 Heroku?

html - 随机长度的 HTML 注释

java - 如何更改 Sqlite 数据库中特定数据的 Listview 中的行颜色

SQLite连接优化

android - 如何使用数据库数据分发 Android 应用程序?