Пароль не может быть пустым ошибка при заполнении базы данных

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

ActiveRecord::RecordInvalid: Ошибка проверки: пароль не может быть пустым

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

User.create!([
  {email: "1234@localhost", encrypted_password: "$2a$10$5eoHh6M2q4GjGkHClO.NqebWWhS94D8rNj5Ot6CB2qrbn7IrTfkSa", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2014-12-31 22:27:09", last_sign_in_at: "2014-12-31 22:27:09", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: false}
])

Кроме того, я использую гем devise для управления пользователями.

Есть ли элегантный способ заполнить пользовательские данные с помощью этого фильтра?


person neanderslob    schedule 13.01.2015    source источник
comment
почему бы вам просто не изменить зашифрованный_пароль на пароль, чтобы пройти проверку?   -  person Andrey Deineko    schedule 13.01.2015
comment
@AndreyDeineko Спасибо за ответ. Очень справедливый вопрос; На самом деле я собирался попробовать. Это был скорее вопрос, чтобы увидеть, есть ли элегантный способ избежать такого рода проверки при посеве.   -  person neanderslob    schedule 13.01.2015


Ответы (2)


Ты можешь сделать:

u = User.new([
  {email: "1234@localhost", encrypted_password: "$2a$10$5eoHh6M2q4GjGkHClO.NqebWWhS94D8rNj5Ot6CB2qrbn7IrTfkSa", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2014-12-31 22:27:09", last_sign_in_at: "2014-12-31 22:27:09", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: false}
])
u.save!(validate: false)
person BroiSatse    schedule 13.01.2015
comment
Синтаксис мог измениться в Rails 6. Я получил сообщение об ошибке: ArgumentError: При назначении атрибутов вы должны передать хэш в качестве аргумента, переданный массив, когда я следовал этому примеру. Я удалил скобки массива, так что вместо этого было просто: u = User.new({{email: "1234@localhost", encrypted_password: "..."}), и это сработало. - person antun; 01.06.2020

Была такая же проблема. Решение User.new у меня не сработало.

Следующее решение действительно сработало из аналогичного вопроса «Заполнение пользователей с помощью Devise» здесь: ">Заполнение пользователей с помощью Devise в Ruby on Rails

Короче говоря, замените зашифрованный_пароль на пароль и пароль обычный текст, который вам удобно использовать.

Пример:

User.create!([
  {email: "1234@localhost", password: "some_password", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2014-12-31 22:27:09", last_sign_in_at: "2014-12-31 22:27:09", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: false}
])

Затем вы можете запустить rake db:seed. Rails сделает свое волшебство (автоматически создав хэш encrypted_password) для каждого пользователя, и вы сможете нормально войти в систему.

person Kobi    schedule 27.05.2016