#ruby-on-rails #ruby-on-rails-3
#ruby-on-rails #ruby-on-rails-3
Вопрос:
У меня есть файл seeds.rb, и по какой-то причине это не работает:
#doesn't work
u=User.new
u['email']=h['email']
u['password']=h['password']
puts u['email']
puts u['password']
if u.save
puts "that saved"
else
puts "that did not save"
end
но это делает:
#does work
User.create({:email => h['email'], :password => h['password']})
Есть ли какая-то причина, по которой одно работает, а другое нет? Из консоли rails первый работает? Будут ли какие-либо различия в проверках? Я запускаю ‘rake db: seed’, поэтому думаю, что проверки будут действовать в обоих.
спасибо
редактировать # 1
извините за отсутствие информации. каждый выдает ошибку «пароль не может быть пустым», но затем он выдает пароль. Хм…
Комментарии:
1. Что вы подразумеваете под «не работает»? Есть ли ошибка, или она просто не сохраняется? Если последнее, проверьте содержимое
u.errors
.
Ответ №1:
Узнайте, что происходит, просмотрев ошибки проверки:
else
puts "that did not save because " u.errors.join(' ')
end
Редактировать: Теперь, когда вы добавили, что ошибки проверки содержат 'password cant be blank'
и по-прежнему не сохраняются, становится ясно, что User.create()
это делает ряд вещей, которые User.save()
опускаются.
Чего не хватает, так это генерации хэша вашего пароля — отсюда blank password
и ошибка.
Комментарии:
1. каждый выдает ошибку «пароль не может быть пустым», но затем продолжает повторять пароль.
Ответ №2:
Попробуйте так:
u = User.new
u.email = h['email']
u.password = h['password']
puts u.inspect
if u.save!
puts "that saved"
else
puts "that did not save"
end
Я считаю, что подход доступа к атрибуту u
объекта as u['password']
ведет вас неправильно.
Кроме того, выполнение a u.inspect
выводит все состояние модели, и это должно обеспечить более чистый способ увидеть, что происходит. Наконец, добавление bang !
в конце сохранения приведет к «быстрому сбою» и немедленно выдаст вам ошибку.