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

招待状の作成時にスラッグを作成したい場合:

私は同じ問題に遭遇しました。

ユーザーを招待するために使用するコマンド:
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("-")ニーズに合った別のものに変更する必要があるかもしれません)

invite!devise が使用するメソッドをオーバーライドします。

def invite!
  super
  slug_me! if should_generate_new_friendly_id?
end

if should_generate_new_friendly_id?同じ人を複数回招待してもスラッグが発生しないように追加しました)

この場合should_generate_new_friendly_id?は戻ります。trueslugnilslug.blank?true

それは最善の解決策ではないかもしれませんが、私にとってはうまくいきます。(そして、私はまだより良い解決策を探しています)

于 2015-02-12T21:48:28.023 に答える
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 に答える