2015-08-10 2 views
0

я пошел, чтобы создать user=User.new (:screen_name => "jeff holmes", :email "[email protected]", :password "1234") я имел некоторые валидации я пытался увидеть, если она будет проходить:Создан новый пользователь - пользователь существует?

class User < ActiveRecord::Base 

    validates_uniqueness_of :screen_name, :email 
    validates_length_of :screen_name, :within => 4...20 
    validates_length_of :password, :within => 4...20 
    validates_length_of :email, :within => 6...50 

    def validate 
    errors.add(:email, 'must be valid.') unless email.include? ("@") 
    errors.add(:screen_name, 'cannot include spaces.') if screen_name.include?(" ") 
    end 
end 

После того как я пытаюсь создать пользователь все эти вещи выскакивают, и я понятия не имею, что это такое.

NameError: undefined local variable or method `user' for main:Object 
     from (irb):3 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.1/lib/rails/commands/console.rb:110:in `start' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.1/lib/rails/commands/console.rb:9:in `start' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.1/lib/rails/commands/commands_tasks.rb:68:in `console' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.1/lib/rails/commands/commands_tasks.rb:39:in `run_command!' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.1/lib/rails/commands.rb:17:in `<top (required)>' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:274:in `require' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:274:in `block in require' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:240:in `load_dependency' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:274:in `require' 
     from /Users/coreyholmes/RubymineProjects/worklink/bin/rails:8:in `<top (required)>' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:268:in `load' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:268:in `block in load' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:240:in `load_dependency' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:268:in `load' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/spring-1.3.6/lib/spring/commands/rails.rb:6:in `call' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/spring-1.3.6/lib/spring/command_wrapper.rb:38:in `call' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/spring-1.3.6/lib/spring/application.rb:183:in `block in serve' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/spring-1.3.6/lib/spring/application.rb:156:in `fork' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/spring-1.3.6/lib/spring/application.rb:156:in `serve' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/spring-1.3.6/lib/spring/application.rb:131:in `block in run' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/spring-1.3.6/lib/spring/application.rb:125:in `loop' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/spring-1.3.6/lib/spring/application.rb:125:in `run' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/spring-1.3.6/lib/spring/application/boot.rb:18:in `<top (required)>' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require' 
     from /Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require' 

Тогда после того, как все, что материал всплывает я иду user.save и это кажется.

NameError: undefined local variable or method `user' for main:Object 

Что происходит? Что я делаю неправильно здесь.

Благодаря

+1

У меня не возникла ваша проблема .. –

+0

без проверок, даже не проблема. мы можем только догадываться, и я следую за Arup Rakshit - «я не получил вашу проблему ...» –

+0

У меня есть проверки, но, возможно, они не работают? –

ответ

0

Не 100% уверен на проблему под рукой, но вот немного обзор процесса создания

user = User.new # creates the user object/instance but DOES NOT save or populate the ID column/attribute/method 
# OR ... 
user = User.new(params[:user]) # often what you see in a controller action 
user.valid? # checks to ensure your validations pass ... duh :) 
user.save # saves the users 
# from here, you can do a few things: 
user.persisted? # this checks if the user was saved in the DB 
user.id 
# will now show you the user's id ... 
# in your original post's code it appears you check for the id _before_ the save and it has to be saved before that attribute/method is populated. 

User Exists является Rails проверки, чтобы убедиться, что пользователь уже находится в БД, прежде чем он пытается сохранить его (мой смысл в том, что ваша модель пользователя проверяет методы и атрибуты email и screen_name)

Что касается просмотра пользователя после его создания, вы можете сделать несколько вещей:

  1. Если вы находитесь на консоли, просто введите user, чтобы получить выход.
  2. В веб-представлении (читайте: браузер) вы должны перейти на http://localhost:3000/users/ID_OF_NEW_USER (предполагается, что у вас есть действие show в вашем UserController и show view (show.html.erb или show.html.haml) ... и если вы сгенерировали леску (rails generate scaffold User email:string ..., у вас есть эти!)

Опять же, не совсем уверен, что я понял вашу просьбу, но я надеюсь, что это поможет вам понять этот поток немного лучше

UPDATE:. только видел Этот код является неправильным:

user=User.new (:screen_name => "jeff holmes", :email "[email protected]", :password "1234") 

Это должно быть

user=User.new (:screen_name => "jeff_holmes", :email => "[email protected]", :password => "1234") # note the missing '=>' for email and password and the space in the screen_name, which is invalid according to the model 
+0

Спасибо ! Где я вижу этих пользователей, которых я создал? –

+0

Без проблем! В браузере вы можете перейти к 'http: // localhost: 3000/users' и отобразить действие' index' UserController, которое (как правило) перечисляет всех пользователей в системе. Опять же, это предполагает, что вы либо создали это действие, либо подстроили модель User и т. Д. На консоли вы можете просто сделать user = User.all и проверить полный список пользователей в вашей БД! –

+0

Когда тип 'пользователь = User.all' я получаю это: ' IRB (основной): 001: 0> Пользователи = User.all /Users/coreyholmes/RubymineProjects/worklink/app/models/user.rb : 22: предупреждение: регулярное выражение имеет «]» без побега: /^[A-Z0-9._%-][email protected](A-Z0-9-]+\.)+[AZ]{2,4} $/ ArgumentError: Предоставленное регулярное выражение использует многострочные якоря (^ или $), которые могут представлять угрозу безопасности. Вы имели в виду использовать \ A и \ z или забыли добавить параметр: multiline => true? ' –

0

Вы делаете хорошо.

user = User.create name: "name", email: "[email protected]", password: "123456" 

Призвав метод create класса, выполняющий все проверки. Если они не вызвали вызов метода сохранения. Поскольку пользователь является new_object? рельсы создадут пользователя.

После этого у вас есть экземпляр пользователя в переменной «пользователь».

Другой путь

user = User.new 
user.email = "[email protected]" 
.... 
user.save 

Здесь снова, метод сохранения будет вызывать валидации, и если они передают это сохранит объект в базу данных.

Вы можете получить ID с user.id или User.last (который будет загружать последнего пользователя из базы данных).

Лучший способ проверить эти поведения и играть с ним - это консоль рельсов. вы можете запустить его с помощью рельсов c

у вас все в порядке.

всего лишь небольшой намек: взгляните на драгоценный камень под названием «devise», который реализует вам полную логику пользователя в течение 15 минут. никакая строка кода не должна быть написана.

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