2013-07-16 5 views
3

Я использую Devise для управления пользователями в моем приложении rails. У меня есть кнопка, доступная для пользователей admin, которая приводит к форме, которая позволяет им создавать другие учетные записи пользователей admin.Создайте нового пользователя программно с помощью Devise

Когда форма передается этот код называется:

@user = User.new(:email => params[:email], :password => params[:password], :password_confirmation => params[:password_confirmation]) 
@user.admin = true 
@user.save 

Это, кажется, не работает правильно, так как при входе, и попытаться войти в систему с новой учетной записью администратора он терпит неудачу. Я предполагаю, что приведенный выше код не является правильным способом создания нового пользователя с помощью Devise.

Любые идеи?

Edit:

Журналы

Started POST "https://stackoverflow.com/users/13/create_admin" for 127.0.0.1 at 2013-07-16 17:01:38 +0100 
Processing by UsersController#create_admin as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"VpP78Zy8SAcyC1Mgg6hEjG2I5jqNzIHXQGtbjUzDYVE=", "users"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up", "id"=>"13"} 
    User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = 13 LIMIT 1 
    (0.3ms) BEGIN 
    (0.1ms) ROLLBACK 
    Rendered users/create_admin.html.erb within layouts/application (0.0ms) 
Completed 200 OK in 12ms (Views: 5.3ms | ActiveRecord: 0.9ms) 

Вот моя форма:

<%= form_for :users, :html => { :id => "signup-form" }, :url => create_admin_user_path do |f| %> 
<div><%= f.label :email %> 
<%= f.email_field :email, :autofocus => true %></div> 

<div><%= f.label :password %> 
<%= f.password_field :password %></div> 

<div><%= f.label :password_confirmation %> 
<%= f.password_field :password_confirmation %></div> 

<div class="actions"> 
    <div><%= f.submit "Sign up", :class => "btn btn-success" %></div> 
</div> 
+0

Является пользователем, которые создали в базе данных? Когда вы пытаетесь войти в новую учетную запись, указывает ли это, что пароль неверен? Вы можете запустить сброс пароля с адресом электронной почты новой учетной записи? –

+0

Ваш администратор действительно «Пользователь», или это «AdminUser» или «Администратор»? –

+0

Можете ли вы разместить свой Модальный пользователь? –

ответ

2

вы на самом деле размещения

"users"=>{"email"=>"[email protected]", "password"=>""} 

Таким образом, вы должны быть

@user = User.new(:email => params[:users][:email], :password => params[:users][:password], :password_confirmation => params[:users][:password_confirmation])) 
@user.admin = true 
@user.save 
+0

Я положил! после сохранения и получения: Ошибка проверки: электронная почта не может быть пустым, пароль не может быть пустым. Поэтому я подозреваю, что ты прав. Однако с кодом, который вы опубликовали, я получаю: undefined method '[] 'для nil: NilClass –

+0

Получил его, должно быть было: пользователь не: пользователи. Работаю сейчас. Спасибо за вашу помощь! –

+0

Как насчет 'User.new (params [: user])' и атрибуты whitelist в модели или фильтр с помощью 'params [: user] .splice'? –

1

В новом завещанию следует удалить пароль из PARAMS хэш. Если пароль пуст. Например. мы хотим изменить профиль, но не меняем пароль. Или разработка не будет подтверждена.

if params[:user][:password].blank? 
    params[:user].delete(:password) 
    params[:user].delete(:password_confirmation) 
end 

См. documentation для получения более подробной информации.

Смежные вопросы