我使用Devise(1.4.8)作为我的用户模型,并且一直在尝试实现一个简单的beta邀请功能(Rails 3.0.7),跟随Ryan Bates的railscast。
我无法让我的设计模型控制器的[new]方法识别出邀请令牌。我怀疑这是因为我没有成功覆盖Devise的注册控制器。
我假设不是使用user_controller来从注册表单传递变量,我必须覆盖devise的注册控制器。所以我的registrations_controller.rb在controllers文件夹的根目录中:
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
在routes.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?
答案 0 :(得分:0)
如果您在控制器中转储params [:invitation_token]怎么办?你有这个参数吗?
您应该在路线中使用'registrations#new',而不是'devise / registrations #new'
答案 1 :(得分:0)
经过一些研究,我发现其他人遇到了类似的问题:
真正的问题是我试图将变量传递给Omniauth的回调方法之一。我无法弄清楚如何做到这一点。作为一种解决方法,我最终使用了一个会话变量并从Omniauth回调方法中访问它。
不是很优雅,但是做到了。