我使用Devise gem登录,注册和其他目的,它运行得很好。 当我登录应用程序并且我想从内部添加另一个用户时,问题就开始了。 我只看到了#34;你已经登录了。"没有别的。
所以我为这个动作创建了另一个控制器 - "经理",但没有任何改变。
控制器看起来像这样:
class ManagerController < ApplicationController
skip_before_filter :require_no_authentication
def new
@user = User.new
end
def create
@user = User.new(user_params)
respond_to do |format|
if @user.create
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render action: 'show', status: :created, location: @user }
else
format.html { render action: 'new' }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
end
路线:
devise_for :users
resources :manager
我如何兼顾 - 从外部注册和从内部添加用户?
Rails 4,Devise 3.2.4
答案 0 :(得分:4)
Devise :: RegistrationsController默认为require_no_authentication before filter
。
所以需要跳过它:
您需要覆盖注册控制器。在控制器启动时粘贴这一行
skip_before_filter :require_no_authentication
before_filter :authenticate_user!
因为我们想在用户进入后使用注册控制器。
基本上注册是图片中的第一,但是我们需要在里面使用它,所以不需要制作更多的控制器,只需覆盖设计方法和控制器。
----------------------------------------------- - - - - - - - 更新 - - - - - - - - - - - - - - - - - - -------------------------
在模型中添加此方法
型号/ User.rb before_validation:generate_pwd
def generate_pwd
your_generated_pwd = @Random password string
self.password = your_generated_pwd
end
在Route.rb
resources :managers
在views / managers / new.html.erb
中<%= form_for User.new do |f| %>
<%= f.email_field :email %>
<%= f.submit %>
<% end %>
并使用new_manager_path打开此表单。表格将使用registration_controller的创建方法。