Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 友军ID不会在新的邀请上产生新的子弹(设计不可邀请)_Ruby On Rails 4_Devise_Friendly Id_Devise Invitable - Fatal编程技术网

Ruby on rails 4 友军ID不会在新的邀请上产生新的子弹(设计不可邀请)

Ruby on rails 4 友军ID不会在新的邀请上产生新的子弹(设计不可邀请),ruby-on-rails-4,devise,friendly-id,devise-invitable,Ruby On Rails 4,Devise,Friendly Id,Devise Invitable,当我使用Desive 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

当我使用Desive 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

我尝试了很多不同的选项,但似乎无法解决问题

假设您在接受邀请的过程中收集了被邀请人的姓名,可以通过将以下内容添加到控制器中来实现:

应用程序控制器


如果要在创建邀请时创建slug:

我也遇到了同样的问题

我用于邀请用户的命令: User.invite!电邮:example@email.com,姓名:约翰

问题是,出于某种原因,应该生成新的友好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
在我的应用程序中,新的_熔渣将是独一无二的。不确定你的应用程序。您可能需要将[name.parameterize,User.last.id+1].更改为符合您需要的其他内容

并覆盖邀请!设计使用的方法:

def invite!
  super
  slug_me! if should_generate_new_friendly_id?
end
我已经添加了是否应该生成新的友好id?因此,如果你邀请同一个人不止一次,它不会产生一个鼻涕虫

在这种情况下,是否应该生成新的友好id?将返回true,因为slug为nil,所以slug.blank?将返回真值

这可能不是最好的解决方案,但对我来说很有效。
我仍在寻找更好的解决方案

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

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

FriendlyId有一个私有方法集\u slug-使用该imo比重新实现所有逻辑更好。您可以使用user.send:set_slug调用它,如果您在模型中,则只需send:set_slug即可。注意,这不会保存记录—我正在调用user.savevalidate:false,在设置_slug保存后,但您的用例可能会有所不同。和使用任何私有方法一样,请确保您有一个涵盖此内容的测试,以便在FriendlyId将来更改其实现时能够捕获它。
before_invitation_created :generate_slug

private

  def generate_slug
    return unless slug.nil?

    self.slug = set_slug
  end