Rails Beta邀请 - 覆盖设计注册控制器

时间:2011-11-05 11:00:46

标签: ruby-on-rails ruby-on-rails-3 devise railscasts invitation

我使用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?

2 个答案:

答案 0 :(得分:0)

如果您在控制器中转储params [:invitation_token]怎么办?你有这个参数吗?

您应该在路线中使用'registrations#new',而不是'devise / registrations #new'

答案 1 :(得分:0)

经过一些研究,我发现其他人遇到了类似的问题:

真正的问题是我试图将变量传递给Omniauth的回调方法之一。我无法弄清楚如何做到这一点。作为一种解决方法,我最终使用了一个会话变量并从Omniauth回调方法中访问它。

不是很优雅,但是做到了。