Ruby on rails 设计海关注册的最后一步
我在尝试自定义Desive用户注册流时遇到以下错误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 我想实现这样一种体验:用户单击链接注册为任意一种用户类型,然后根据单击的链接用户类型将
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