我想在创建User模型的实例时生成唯一的匿名用户名。理想情况下,如果我没有指定任何用户名,它将默认设置。
例如,当我执行User.create!()时,我想将用户名列设置为'anonymous123',其中123是从序列中获取的唯一编号(该实例的id列的值)没关系。)
答案 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。