rails将列添加到用户模型

Joh*_*ash 14 migration ruby-on-rails

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

在迁移用户记录之前:

id = 1
username = "text"

id = 2
username = "abc"
Run Code Online (Sandbox Code Playgroud)

迁移用户记录后:

id = 1
username = "text"
unsubscribe_key = "5HQdTSsNRY6YCodmzr"

id = 2
username = "abc"
unsubscribe_key = "Jlewfw0324Lwp0sefr"
Run Code Online (Sandbox Code Playgroud)

Aus*_*ins 36

嗯,简单的部分是添加新列.在shell上:

rails generate migration AddUnsubscribeKeyToUsers unsubscribe_key:string
rake db:migrate
Run Code Online (Sandbox Code Playgroud)

此外,您还希望在用户模型中访问此新属性:

应用程序/模型/ user.rb

attr_accessible :unsubscribe_key #along with all your other accessible attributes
Run Code Online (Sandbox Code Playgroud)

接下来,您需要添加唯一键.您可以为此编写一些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
Run Code Online (Sandbox Code Playgroud)

现在回到shell并输入rails console.在ruby命令行上:

>>require "add_unique_keys.rb"
=> true
>>AddUniqueKeys.addUnsubscribeKeysToAllUsers
=> #Should print out array of users
Run Code Online (Sandbox Code Playgroud)

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


Bri*_*tro 5

尝试

 $ rails g migration AddUnsubscribe_keyToUsers unsubscribe_key:string
Run Code Online (Sandbox Code Playgroud)

然后

 $ rake db:migrate
Run Code Online (Sandbox Code Playgroud)