Ruby on rails 设计海关注册的最后一步

Ruby on rails 设计海关注册的最后一步,ruby-on-rails,devise,Ruby On Rails,Devise,我在尝试自定义Desive用户注册流时遇到以下错误 undefined method `errors' for nil:NilClass 我正在尝试用两种不同的用户类型实现design注册 User.rb class User < ActiveRecord::Base ... scope :players, where(:user_type => 'player') ... end 我想实现这样一种体验:用户单击链接注册为任意一种用户类型,然后根据单击的链接用户类型将

我在尝试自定义Desive用户注册流时遇到以下错误

undefined method `errors' for nil:NilClass
我正在尝试用两种不同的用户类型实现design注册

User.rb

class User < ActiveRecord::Base
  ...
  scope :players, where(:user_type => 'player')
  ...
end
我想实现这样一种体验:用户单击链接注册为任意一种用户类型,然后根据单击的链接用户类型将该用户类型传递到该表单中

因此,我有一个自定义注册控制器来在控制器/用户中实现这一点

以及应用程序帮助程序中的设备定义

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 obv中呈现香草设计注册表单,我希望在此视图中将用户类型设置为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 %>
我从根本上理解这个错误,但我不明白为什么或如何

更新潜在解决方案 将参数的形式_更改为-

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

在深入挖掘Desive src之后,form_for似乎没有将参数识别为用户对象。但是,我认为这是修改应用程序帮助程序的重点。因此,根据我对错误的理解,我在更新原始帖子时做了以下更改。如果有人能对这种方法发表评论,那就太好了。采取“让它工作,然后让它工作得更好”的方法
module ApplicationHelper
  def resource_name
     :user
   end

   def resource
     @resource ||= User.new
   end

   def devise_mapping
     @devise_mapping ||= Devise.mappings[:user]
   end
end
<%= 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(@user, :as => :user, :url => registration_path(@user)) do |f| %>
  def players
    @user = User.new
  end
  def coaches
    @user = User.new
  end