2014-09-13 119 views
0

我是新来的rails。 使用导轨4和设计。我试图用一个名为role的类变量来使用单用户模型,这将决定用户是客户还是管理员。Rails设计额外用户注册

我创建了/views/devise/registrations/new.html.erb 的副本:/views/devise/registrations/sign_up2.html.erb

,然后在我的routes.rb中添加:

devise_scope :user do 
    get "users/sign_up2"=> "devise/registrations#sign_up2", :as => "sign_up2" 
end 

但是我不断收到错误:

First argument in form cannot contain nil or be empty 

我有一个客户注册控制器(在控制器/用户/ registration_controller.rb)

class Users::RegistrationsController < Devise::RegistrationsController 
include ApplicationHelper 

def sign_up_params 
    params.require(:user).permit(:first_name, :last_name, :profile_name, :role, :email, :password, :password_confirmation) 
end 

回答

0

首先的(特别是如果你是新来的Rails):坚持公约,除非你真的要改变他们。
我看不到,为什么需要重新命名sign_up。

第二种:您尝试路由到控制器Devise::RegistrationsController的操作sign_up2,但该控制器没有方法sign_up2
也许你想路由到您自己的控制器Users::RegistrationsController,比你的路线是这样的:

device_scope :user do 
    get "users/sing_up2" => "users/registrations#sign_up2", as: "sign_up2" 
end 

但是你自己的控制器有没有作用“sign_up2”要么。

三:(这就是你看到的错误)
复制开始与

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

resource没有设置视图。在Devise::RegistrationsController动作new(这正是sign_up路线标准devise)与

build_resource({}) 

您需要类似的在控制器中的东西sing_up2方法开始。