当我使用设计邀请在我的Rails 4应用程序中邀请用户时,应用程序不会创建新的友好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
我尝试了很多不同的选择,但似乎无法弄清楚
答案 0 :(得分:0)
假设您在邀请接受过程中收集了被邀请者的姓名,可以通过将其添加到您的控制器来实现:
应用程序控制器
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:accept_invitation).concat([:name, :slug])
end
答案 1 :(得分:0)
如果您想要在创建邀请时创建slu ::
我遇到了同样的问题。
我用来邀请用户的命令:
User.invite!(email: "example@email.com", name: "John John")
问题在于,由于某些原因,在此过程中未调用should_generate_new_friendly_id?
。
我的解决方案是编写一个方法来创建用户slug
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("-")
更改为符合您需求的其他内容)
并覆盖设计使用的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
它可能不是最好的解决方案,但它对我有用。 (我仍在寻找更好的解决方案)
答案 2 :(得分:0)
我在以下方面遇到了同样的问题
PipedAudioStream(java.lang.String resource)
我的解决方法是:
User.invite!(email: "example@email.com", name: "John John")