2

私はユーザーモデルにDevise(1.4.8)を使用しており、Ryan Batesのrailscastに従って、単純なベータ招待機能(Rails 3.0.7)を実装しようとしています。

デバイスモデルのコントローラーの[新しい]メソッドで招待トークンを認識できません。これは、Deviseの登録コントローラーを正常にオーバーライドしていないためだと思います。

登録フォームから変数を渡すためにuser_controllerを使用する代わりに、deviseの登録コントローラーをオーバーライドする必要があると想定しています。したがって、controllersフォルダーのルートにあるregistrations_controller.rb:

class RegistrationsController < Devise::RegistrationsController
  def new
    super
    @user = User.new(:invitation_token => params[:invitation_token])
    @user.email = @user.invitation.recipient_email if @user.invitation
  end
end

ルート.rb内:

devise_for :users, :controllers => {:registrations => 'registrations'} do
  get 'users/sign_up/:invitation_token' => 'devise/registrations#new', :as => "new_user_registration"
end

Invitation_controller.rbで

Mailer.invitation(@invitation, new_user_registration_url+"/#{@invitation.token}").deliver

Deviseの登録コントローラーをオーバーライドして、Deviseの新しいユーザーフォームから:invitation_tokenを正常に渡すにはどうすればよいですか?

4

2 に答える 2

0

コントローラにparams[:invitation_token]をダンプするとどうなりますか?パラメータはありますか?

ルートでは「devise/registrations#new」ではなく「registrations#new」を使用する必要があります

于 2011-12-21T03:38:30.753 に答える
0

さらに調査したところ、他の人が同様の問題に遭遇していることがわかりました。

本当の問題は、Omniauthのコールバックメソッドの1つに変数を渡そうとしていたことでした。私はそれを行う方法を理解することができませんでした。回避策として、セッション変数を使用して、Omniauthコールバックメソッド内からアクセスしました。

あまりエレガントではありませんが、トリックを行いました。

于 2011-12-22T05:04:01.727 に答える