Я использую Ruby on Rails 4 с устройством для аутентификации пользователей.Rails 4, Devise - Не удается обновить имя пользователя из консоли rails
У меня возникла проблема с созданием пользователя с консоли или с отредактированного вида регистрации регистрации. Я могу установить пароль и электронную почту, но я не могу установить имя пользователя, мне нужно создать имя пользователя witouth и затем изменить его с dbconsole с помощью команды SQL («UPDATE users SET ...»). Тогда я могу войти с именем пользователя.
Моих пользователей таблица:
create_table "users", force: true do |t|
t.string "name", default: "", null: false
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
end
Моих пользователи Модель:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:rememberable, :trackable, :validatable
validates_presence_of :name, :email, :password
attr_accessor :name
end
Когда я пытаюсь
u = User.new
u.name = "test"
с рельсами консолью имени остается пустой.
Спасибо, это работает, но почему? – FuF
'attr_accessor' - это метод Ruby для определения доступа к вашим переменным экземпляра. Rails (до 4.0) имеет метод 'attr_accessible' для защиты параметров. Они очень часто смешиваются. Когда вы вызываете 'attr_accessor', вы заворачиваете аксессоры Rails для своих полей. – marvelousNinja
В принципе, 'ActiveRecord' магически определяет методы getter/setter для столбцов в вашей базе данных. Когда вы выполняете 'attr_accessor: name', вы переопределяете те, у которых есть обычные методы rubter getter/setter, которые просто получают/устанавливают переменную экземпляра' @ name', которая не имеет отношения к полю базы данных. – gregates