当我在我的Rails4应用程序中使用devise-invitable邀请用户时,应用程序不会创建一个新的友好id。我的user.rb文件中有以下代码
extend FriendlyId
friendly_id :name, :use => :slugged
def should_generate_new_friendly_id?
after_invite_path_for? || new_record? || name_changed? || slug.blank? || super
end我尝试了相当多不同的选择,但似乎找不到答案
发布于 2014-08-30 05:58:52
假设您在接受邀请的过程中收集了您的被邀请者姓名,可以通过将以下内容添加到您的控制器中来实现:
应用程序控制器
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:accept_invitation).concat([:name, :slug])
end发布于 2015-02-13 05:48:28
如果您需要在创建invite时创建插件,请执行以下操作:
我也遇到过同样的问题。
我用来邀请用户的命令:
User.invite!(email: "example@email.com", name: "John John")
问题在于,由于某些原因,在此过程中不会调用should_generate_new_friendly_id?。
我的解决方案是编写一个方法来创建用户段塞
def slug_me!
new_slug = [name.parameterize].join("-")
if User.where(slug: new_slug).present? #check if the is a user with that slug already
new_slug = [name.parameterize, User.last.id+1].join("-")
end
update_column(:slug, new_slug)
end(在我的应用程序中,new_slag将是唯一的。不确定您的应用程序。您可能需要将[name.parameterize, User.last.id+1].join("-")更改为其他适合您需要的内容)
并覆盖devise使用的invite!方法:
def invite!
super
slug_me! if should_generate_new_friendly_id?
end(我已经添加了if should_generate_new_friendly_id?,所以如果你邀请同一个人多次邀请,它不会创建slug )
在本例中,should_generate_new_friendly_id?将返回true,因为slug为nil,因此slug.blank?将返回true
这可能不是最好的解决方案,但它对我来说是有效的。(我仍然在寻找更好的解决方案)
发布于 2020-07-19 19:38:57
我在上面也遇到了同样的问题:
User.invite!(email: "example@email.com", name: "John John")我的解决方案是:
before_invitation_created :generate_slug
private
def generate_slug
return unless slug.nil?
self.slug = set_slug
endhttps://stackoverflow.com/questions/25478992
复制相似问题