Спасибо всем за быстрые ответы! Ваши ответы в совокупности дали мне те части, которые мне нужны, чтобы понять эту загадку, я думаю.
(В связи с этим у меня было много нулевых ошибок, таких как «Объект не поддерживает #inspect» и «undefined method» keys для nil: NilClass ». Мне удалось решить это сейчас, . удаление поля att_accessor в целом)
экспериментируя с данным случаем, это то, что я узнал:
на самом деле,: имя поле не будет сохраняться в базу данных.
user = User.new(:name=>"somename")
Устанавливает только атрибут объекта, но не сохраняет столбец: name в базе данных. Как и следующие "рельсы консольного вывода показывает:
> 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 в * (который заботится о сохранении базы данных). Вы все еще можете получить значение из: имя поля от объекта, хотя, как это:
> user.name
=> "somename"
Итак, в заключение, я узнал, что использование attr_accessor на полях может привести к ним не сохраняется в базе данных ,И хотя я думал, что attr_accessible описывает поля в базе данных, которые должны быть доступны снаружи, в этом случае, похоже, не имеет значения.
Единственный лучший ответ Я видел этот важный и важный вопрос. По какой-то причине это обычно не выдается людям. Благодарю. – Ethan
Это очень хорошее объяснение различий между ними, но это не вопрос: что происходит, когда вы используете их как в одном поле (или что происходит с упорством). Для этого, мой мой итоговый ответ ниже. – Magne