ruby-on-rails - rails 将列添加到用户模型

标签 ruby-on-rails migration

我有用户模型,我想为所有用户记录添加唯一的字符串键。列名应该是 unsubscribe_key。

迁移前 用户记录:

id = 1
username = "text"

id = 2
username = "abc"

迁移后 用户记录:
id = 1
username = "text"
unsubscribe_key = "5HQdTSsNRY6YCodmzr"

id = 2
username = "abc"
unsubscribe_key = "Jlewfw0324Lwp0sefr"

最佳答案

好吧,简单的部分是添加新列。在 shell 上:

rails generate migration AddUnsubscribeKeyToUsers unsubscribe_key:string
rake db:migrate

此外,您还需要在您的用户模型中访问这个新属性:

应用程序/模型/user.rb
attr_accessible :unsubscribe_key #along with all your other accessible attributes

接下来,您需要添加唯一键。您可以为此编写一些 SQL 代码,或者创建一个可以在 rails 控制台中运行的 ruby​​ 脚本。

lib/add_unique_keys.rb
module AddUniqueKeys
  KeyGenCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
  extend self
  def addUnsubscribeKeysToAllUsers
     users = User.all
     users.each do |u|
        u.update_attributes(:unsubscribe_key => generateKey(18))
     end
  end

  def generateKey(keyLength)
     key = ""
     keyLength.times do 
       key += generateKeyCharacter
     end
     key
  end

  def generateKeyCharacter
     KeyGenCharacters[rand(KeyGenCharacters.length)-1]
  end
end

现在回到 shell 并输入 rails console 。在 ruby​​ 命令行上:
>>require "add_unique_keys.rb"
=> true
>>AddUniqueKeys.addUnsubscribeKeysToAllUsers
=> #Should print out array of users

如果一切顺利,您的新列应填充随机字符串。

关于ruby-on-rails - rails 将列添加到用户模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14914659/

相关文章:

ruby-on-rails - Active Storage 永久镜像 URL

ruby-on-rails - 不允许发布返回 405 方法

mysql - #1067 - 'timestamp' 的默认值无效

sql - 如何从 sequelize 迁移中获取原始 SQL

ruby-on-rails - 重命名Rails中的列

ruby-on-rails - 将前缀匹配添加到 pg_search

ruby-on-rails - 从提供给 instance_exec 的 block 中提前返回

testing - Angular 2 RC5 后测试失败

reactjs - react 和 typescript : Constant enums and namespaces are not supported

MySQL Workbench - 数据迁移不起作用