尝试自定义设计用户注册流程时出现以下错误。
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