Как создать уникальные анонимные имена пользователей в RoR? - PullRequest
2 голосов
/ 08 августа 2009

Я хотел бы генерировать уникальные анонимные имена пользователей при создании экземпляра моей модели User. В идеале это будет установлено по умолчанию, если я не укажу имя пользователя.

Так, например, когда я делаю User.create! (), Мне бы хотелось, чтобы для столбца имени пользователя было установлено значение «anonymous123», где 123 - это уникальное число, взятое из последовательности (значение столбца id для этого экземпляра было бы хорошо).

Ответы [ 3 ]

7 голосов
/ 08 августа 2009

Объединение примеров из пары ответов сделало бы это

class User < ActiveRecord::Base
  before_create :set_anonymous_username

  def set_anonymous_username
    username = "anonymous#{User.last.id + 1}" if username.nil?
  end
end

Я использовал здесь before_create, потому что я ожидаю, что вам нужно будет только установить анонимное имя пользователя, прежде чем вы создадите пользователя в первый раз. Before_save будет вызываться каждый раз при сохранении модели и может потребовать ненужных накладных расходов, но любой из них будет работать

0 голосов
/ 08 августа 2009

Что-то вроде

class User < ActiveRecord::Base
  def initialize
    super
    self.username = "anonymous#{User.last.id + 1}"
  end
end

Сделает это при создании нового экземпляра пользователя, даже до его сохранения - на случай, если вы захотите использовать его в предварительном создании представления. Возможно, вы захотите объединить это с чем-то before_save, как упомянуто выше, чтобы получить окончательный последний идентификатор в базе данных во время создания записи.

0 голосов
/ 08 августа 2009

Используйте фильтр before_save для установки имени пользователя до сохранения модели, например,

class User < ActiveRecord::Base
  before_save :set_anonymous_username

  def set_anonymous_username
    username = "anonymous" + User.find_by_sql("SELECT max(id) FROM users").maxid.to_s if username.nil?
  end
end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...