设计自定义注册最后一步

时间:2013-12-23 22:52:08

标签: ruby-on-rails devise

尝试自定义设计用户注册流程时出现以下错误。

undefined method `errors' for nil:NilClass

我正在尝试使用2种不同的用户类型实现设计注册。

User.rb

class User < ActiveRecord::Base
  ...
  scope :players, where(:user_type => 'player')
  ...
end

在香草设计注册中,用户选择他们user_type注册的用户类型为:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :user_type, 'Register As' %>
    <%= f.select :user_type, [['Player', 'player'], ['Coach', 'coach']] %>
  </div>
  ....
<% end %>

我想实现一种体验,即用户点击注册链接作为用户类型,然后根据点击的链接(user_type)将user_type传递到该表单。

所以,我有一个自定义注册控制器来实现controllers/users

class Users::RegistrationsController < Devise::RegistrationsController  

  def players
  end

  def coaches
  end
end

和我的路线

  devise_for :users, :controllers => {:registrations => "users/registrations"},
    skip: [:sessions] do
      get '/signup_player' => "users/registrations#players", :as => :new_player_registration
      get '/signup_coach' => "users/registrations#coaches", :as => :new_coach_registration
    end

设备def在应用程序助手

module ApplicationHelper
  def resource_name
     :user
   end

   def resource
     @resource ||= User.new
   end

   def devise_mapping
     @devise_mapping ||= Devise.mappings[:user]
   end
end

最后,我在/views/registrations/players.html.erb中渲染了vanilla devise注册表单(obv我希望在此视图中将user_type设置为player)。

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%=  devise_error_messages! %>

  <div><%= f.label :user_type, 'Register As' %>
    <%= f.select :user_type, [['Player', 'player'], ['Coach', 'coach']] %>
  </div>

  <div><%= f.label :current_club %>
    <%= f.text_field :current_club %>
  </div>

  ...

  <div><%= f.submit "Sign up" %></div>
<% end %>

在此视图上我收到以下错误。

undefined method `errors' for nil:NilClass

我从根本上理解错误,但我不明白为什么或如何。

更新潜在解决方案

将form_for params改为read -

<%= form_for(@user, :as => :user, :url => registration_path(@user)) do |f| %>

和users / registrations_controller.rb

  def players
    @user = User.new
  end
  def coaches
    @user = User.new
  end

0 个答案:

没有答案