Rails добавить столбец в пользовательскую модель - программирование
Подтвердить что ты не робот

Rails добавить столбец в пользовательскую модель

У меня есть модель пользователя, и я хочу добавить уникальный строковый ключ для всех пользовательских записей. Имя столбца должно быть unsubscribe_key.

До миграции:

id = 1
username = "text"

id = 2
username = "abc"

После миграции:

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

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

Ответ 1

Ну, легкая часть - это добавление нового столбца. На оболочке:

rails generate migration AddUnsubscribeKeyToUsers unsubscribe_key:string
rake db:migrate

Кроме того, вы захотите сделать этот новый атрибут доступным в вашей модели пользователя:

приложение/модели/user.rb

attr_accessible :unsubscribe_key #along with all your other accessible attributes

Затем вам нужно будет добавить уникальные ключи. Вы можете написать код SQL для этого или создать ruby ​​ script, который вы можете запустить в консоли rails.

Библиотека /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

Теперь вернитесь к оболочке и введите rails console. В командной строке ruby:

>>require "add_unique_keys.rb"
=> true
>>AddUniqueKeys.addUnsubscribeKeysToAllUsers
=> #Should print out array of users

Если все пойдет хорошо, ваш новый столбец должен быть заполнен случайными строками.

Ответ 2

Попробуйте

 $ rails g migration AddUnsubscribe_keyToUsers unsubscribe_key:string

Тогда

 $ rake db:migrate

Ответ 3

Это решение.

class AddUnsubscribeTokenToUsers < ActiveRecord::Migration
  def self.up
    add_column :users, :unsubscribe_key, :string, :unique => true
        User.all.each do |user|
            user.unsubscribe_token = ActiveSupport::SecureRandom.hex(18)
        end
  end
  def self.down
    remove_column :users, :unsubscribe_key
  end
end

Ответ 4

В Rails 4.0 добавьте один столбец или несколько столбцов, используя простой способ. https://gist.github.com/pyk/8569812