Ответ 1
Найдено.
Мне нужно только удалить модуль registerable
из разработки, и он работает.
Я собираюсь создать многопользовательское приложение, поэтому у меня будет пользователь admin, у которого будет разрешение на создание новых.
Я создал UsersController
, но при попытке создать нового пользователя, будучи уже подписанным, я получаю перенаправление на root_path с сообщением об ошибке "Вы уже вошли".
Итак, что мне делать, чтобы сделать это возможным?
Найдено.
Мне нужно только удалить модуль registerable
из разработки, и он работает.
В методе контроллера вы не можете просто пойти:
def create_user
@user = User.new(:email => params[:email], :password => params[:password])
@user.save
...
end
Вот как я это делаю в 2015 году
# in your terminal
rails g controller Registrations
Контроллер регистрации должен выглядеть следующим образом:
# registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
skip_before_filter :require_no_authentication, only: [:new]
def new
super
end
end
Важной линией является skip_before_filter...
Это отключит требование о том, чтобы пользователь не вошел в систему.
Маршруты для контроллера выглядят следующим образом:
# routes.rb
devise_for :users,
controllers: {:registrations => "registrations"}
Это позволит разработчику использовать ваш пользовательский контроллер регистрации
Наконец, настройка настраиваемого маршрута для этого действия:
# routes.rb
as :user do
get "/register", to: "registrations#new", as: "register"
end
Вы можете либо переопределить контроллер по умолчанию, либо добавить свою собственную логику, либо, возможно, было бы легче создать новый (административный) контроллер и просто создать пользователя, используя одно из его действий.
@user = User.create!(:name => params[:foo], :email => params[:bar])
redirect_to @user
У разработчика есть множество руководств о том, как настроить его поведение здесь: https://github.com/plataformatec/devise/wiki/_pages
Это, в частности, может вас заинтересовать: https://github.com/plataformatec/devise/wiki/How-To:-Manage-Users-with-an-Admin-Role-(CanCan-method). Но не забудьте взглянуть на остальные статьи, их много.
Существует другое решение.
Вы должны переопределить контроллер регистрации и удалить действие (или действия) из prepend_before_filter
.
DeviseRegistrationController
источник здесь.
Вы можете видеть:
prepend_before_filter :require_no_authentication, only: [:new, :create, :cancel]
Он переходит в require_no_authentication
перед тем, как создать метод. Если вы хотите создать нового пользователя во время входа в систему, просто удалите :create
из массива.
в случае, если кто-то все еще ищет помощь, потому что для этого требуется некоторое время, нет четких ответов
в вашем контроллере
class UsersController < ApplicationController
def new
@user = User.new
end
def add_user
@user = User.new(user_params)
if @user.save!
redirect_to root_path
end
end
private
def user_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
end
в ваших маршрутах:
get 'employees', to: 'users#new'
post 'employees', to: 'users#add_user'
и, наконец, такую форму:
<%= form_for User.new , :url => {:action => "add_user"} do |user| %>
<%=user.email_field :email%>
<%=user.password_field :password%>
<%=user.password_field :password_confirmation%>
<%=user.submit 'add'%>
<%end%>
@Mourkeer +1
Для simple_form 4.2.0 возьмите код @Mourkeer и замените route.rb
на:
# route.rb
devise_for :users, path_names: { registration: "registrations" }