2016-01-18 2 views
0

Я заполняю форму для регистрации на своем сайте. Я набираю имя, фамилию, адрес электронной почты, пароль и подтверждение пароля. Когда я нажимаю «отправить», моя форма очищается, а консоль сообщает мне, что пользователь уже существует (хотя это не делает, и выдает мне сообщение об успешном завершении). Вкратце: Я пытаюсь создать нового пользователя и сохранить его в моей базе данных.Пустая база данных, пользователь уже существует?

Смотрите ниже:

User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."firstname" IS NULL LIMIT 1 (0.1ms) rollback transaction
Rendered users/new.html.erb within layouts/application (2.4ms) Completed 200 OK in 136ms (Views: 68.4ms | ActiveRecord: 0.9ms)

См ниже код - ура!

users_controller.rb

class UsersController < ApplicationController 

def create 
    @user = User.new(user_params) 
    if @user.save 
    flash[:success] = "You signed up successfully" 
    flash[:color] = "valid" 
    redirect_to @user 
    else 
    flash[:notice] = "Form is invalid" 
    flash[:color] = "invalid" 
    render "new" 
    end 
end 


private 
def user_params 
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation) 
end 


def show 
    @user = User.find(params[:id]) 
end 

def new 
end 

end 

user.rb

class User < ActiveRecord::Base 


    validates_length_of :password, :in => 6..20, :on => :create 
    validates :password_confirmation, presence: true, if: -> { new_record? || changes["password"] } 

end 

new.html.erb

<%= form_for(:user, :url => {:controller => 'users', :action => 'create'}) do |f| %> 

<%= render 'shared/error_messages' %> 

    </br> <%= f.text_field :firstname, placeholder: 'First Name' %> 
    </br> <%= f.text_field :lastname, placeholder: 'Last Name' %> 
    </br> <%= f.text_field :email, placeholder: 'Email' %> 
    </br> <%= f.password_field :password, placeholder: 'Password' %> 
    </br> <%= f.password_field :password_confirmation, placeholder: 'Confirm Password' %> 
    <%= f.submit :Register %> 
    <% end %> 
+0

Полезный трафик или, по крайней мере, информация о том, что вы делаете, будут полезны ... – Smar

+0

@Smar Я заполняю форму для регистрации на своем сайте. Я набираю имя, фамилию, адрес электронной почты, пароль и подтверждение пароля. Когда я нажимаю «отправить», моя форма очищается, а консоль сообщает мне, что пользователь уже существует (хотя он и не работает). Я пытаюсь создать нового пользователя и сохранить его в моей базе данных. – Brittany

ответ

3

Как вы можете видеть из сгенерированного SQL, firstname является nil вашим новым пользователем.

Это потому, что эта строка содержит опечатки:

params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation

должен быть:

params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation

+0

Woah, спасибо, что поймал это! Я исправил эту строку, но после нажатия «register» (отправки моей формы) я получил эту ошибку: «UnknownAttributeError (неизвестный атрибут« password_confirmation »для пользователя.)» Для этой строки: @user = User.new (user_params) – Brittany

+2

@Brittany это потому, что 'password_confirmation' не является атрибутом' User', как правило, это делается через нечто вроде '' has_secure_password' (http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html) который добавит это как виртуальный атрибут для целей проверки. Убедитесь, что вы добавили 'has_secure_password' в' User' и повторите попытку. Обратите внимание, что вы также можете добавить 'bcrypt' в свой GemFile, чтобы это работало соответствующим образом. – engineersmnky

+0

Вы рок - спасибо! Работает как шарм. – Brittany

0

Я думаю, вам не хватает некоторых параметров. С помощью разработки? Попробуйте создать нового пользователя через консоль rails, чтобы узнать, какие параметры необходимы.

0

Проверьте сильные параметры, приведенные в first_name и last_name, но в форме это firstname и lastname ,

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