友情ID不会在新的邀请中产生新的障碍(设计 - 邀请)

时间:2014-08-25 04:21:20

标签: ruby-on-rails-4 devise friendly-id 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

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

3 个答案:

答案 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,因为slugnil,因此slug.blank?将返回true

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

答案 2 :(得分:0)

我在以下方面遇到了同样的问题

PipedAudioStream(java.lang.String resource) 

我的解决方法是:

User.invite!(email: "example@email.com", name: "John John")