如何在RoR中生成唯一的匿名用户名?

时间:2009-08-08 14:07:07

标签: ruby-on-rails

我想在创建User模型的实例时生成唯一的匿名用户名。理想情况下,如果我没有指定任何用户名,它将默认设置。

例如,当我执行User.create!()时,我想将用户名列设置为'anonymous123',其中123是从序列中获取的唯一编号(该实例的id列的值)没关系。)

3 个答案:

答案 0 :(得分:7)

结合几个答案的例子就可以了

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,因为我希望你在第一次创建User之前只需要设置一个匿名用户名。每次保存模型时都会调用before_save,这可能是不必要的开销,但任何一个都可以工作

答案 1 :(得分:0)

使用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 

答案 2 :(得分:0)

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

在创建User的新实例时,即使在保存之前,也会这样做 - 以防您想在视图预创建中使用它。您可能希望将它与上面提到的before_save结合起来,以便在创建记录时获得数据库中的最终最后一个ID。