Спасибо всем за быстрые ответы!Ваши ответы в совокупности дали мне кусочки, необходимые для понимания этой головоломки, я думаю.
(В связанной с этим проблеме я получал много нулевых ошибок, таких как «Объект не поддерживает #inspect» и «undefined метод 'keys' для nil: NilClass ". Мне удалось решить это сейчас, полностью удалив поле att_accessor.)
Поэкспериментировав с этим конкретным случаем, я выяснил следующее:
На самом деле, поле: name не будет сохранено в базе данных.
user = User.new(:name=>"somename")
Устанавливает только атрибут объекта, но не сохраняет столбец: name в базе данных.Как показано в следующем выводе 'rails console':
> user
=> <User id: nil, created_at: nil, updated_at: nil>
> user.save
=> true
> user
=> <User id:1, created_at: 2011-01-19 12:37:21, updated_at: 2011-01-19 12:37:21>
Я предполагаю, что это потому, что * установщик, созданный attr_accessor, переопределит установщик ActiveRecord * (который заботится о сохранении базы данных).Вы все еще можете извлечь значение из поля: name из объекта, хотя, например так:
> user.name
=> "somename"
Итак, в заключение я узнал, что использование attr_accessor в полях может привести к тому, что они не будут сохранены вбаза данных.И хотя я думал, что attr_accessible описывает поля в базе данных, которые должны быть доступны извне, в этом случае, похоже, это не имеет значения.