0

当我使用 devise-invitable 在我的 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

我尝试了很多不同的选项,但似乎无法弄清楚

4

3 回答 3

0

假设您在邀请接受过程中收集您的受邀者姓名,这可以通过将其添加到您的控制器来实现:

应用控制器

before_filter :configure_permitted_parameters, if: :devise_controller?

protected

def configure_permitted_parameters    
   devise_parameter_sanitizer.for(:accept_invitation).concat([:name, :slug])
end
于 2014-08-29T21:58:51.873 回答
0

如果您想在创建邀请时创建 slug:

我遇到了同样的问题。

我用来邀请用户的命令:
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?,所以如果您多次邀请同一个人,它就不会产生蛞蝓)

在这种情况下should_generate_new_friendly_id?会返回,true因为slug会返回nilslug.blank?true

它可能不是最好的解决方案,但它对我有用。(我仍在寻找更好的解决方案)

于 2015-02-12T21:48:28.023 回答
0

我遇到了同样的问题:

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
  end
于 2020-07-19T11:38:56.613 回答