如果用户未指定用户名,我的用户模型上有一个活动记录回调以生成用户名。当用户通过Google,Facebook或任何其他第三方注册时,就会发生这种情况。
class User < ActiveRecord::Base
extend FriendlyId
friendly_id :username, use: :slugged
before_validation :set_default_username
private
def set_default_username
self.username ||= "user#{User.last.id+1}"
end
end
问题是,在我的种子文件中,我注意到我的一个用户,没有创建slug,特别是在这种情况下:
User.create(email:"nousername@outlook.com", password: "password")
由于set_default_username正在创建用户名,因此未创建slug。有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
在@ rich-peck的帮助下,我在阅读了friendly_id的源代码后找到了解决这个问题的方法。问题的根源是friendly_id uses a before_validation来设置slu ..
为了解决我的问题,我必须将我的模型设置如下。
class User < ActiveRecord::Base
extend FriendlyId
before_validation :set_default_username
friendly_id :username, use: :slugged
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable
private
def set_default_username
self.username ||= "user#{User.maximum(:id).next}"
end
def should_generate_new_friendly_id?
slug.blank? || username_changed?
end
end
答案 1 :(得分:1)
也许是friendly_id
问题:
Class User < ActiveRecord::Base
extend FriendlyId
friendly_id :username, use: :slugged
before_save :set_default_username
private
def set_default_username
self.username ||= "user#{User.maximum(:id).next}"
end
def should_generate_new_friendly_id?
slug.blank? || username_changed?
end
end
适合您的资源:Ruby on Rails: How to get ActiveRecord to show the next id (last + 1)?