it-swarm.com.de

schienen fügen dem Benutzermodell eine Spalte hinzu

Ich habe ein Benutzermodell und ich möchte allen Benutzerdatensätzen einen eindeutigen Zeichenfolgenschlüssel hinzufügen. Der Spaltenname sollte unsubscribe_key sein.

Vor der Migration Benutzerdatensatz:

id = 1
username = "text"

id = 2
username = "abc"

Nach der Migration Benutzerdatensatz:

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

id = 2
username = "abc"
unsubscribe_key = "Jlewfw0324Lwp0sefr"
14
Johnny Cash

Nun, der einfache Teil fügt die neue Spalte hinzu. Auf der Shell:

Rails generate migration AddUnsubscribeKeyToUsers unsubscribe_key:string
rake db:migrate

Sie möchten dieses neue Attribut auch in Ihrem Benutzermodell verfügbar machen:

app/models/user.rb

attr_accessible :unsubscribe_key #along with all your other accessible attributes

Als Nächstes müssen Sie die eindeutigen Schlüssel hinzufügen. Sie können dazu SQL-Code schreiben oder ein Ruby-Skript erstellen, das Sie in der Rails-Konsole ausführen können.

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

Gehen Sie nun zurück zur Shell und geben Sie Rails console ein. In der Ruby-Befehlszeile:

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

Wenn alles gut geht, sollte Ihre neue Spalte mit zufälligen Zeichenfolgen ausgefüllt werden.

36
Austin Mullins

Versuchen 

 $ Rails g migration AddUnsubscribe_keyToUsers unsubscribe_key:string

Dann

 $ rake db:migrate
5
Brian Petro

Es ist die Lösung.

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
3
Johnny Cash

Fügen Sie in Rails 4.0 auf einfache Weise eine oder mehrere Spalten hinzu. https://Gist.github.com/pyk/8569812

0
Nikhil Thombare