Я иногда вижу атрибуты/читатели/писатели атрибутов в коде для моделей. Являются ли они необходимыми, если я хочу иметь возможность обновлять атрибуты из кода представления/контроллера?
Я новичок, поэтому я говорю об основных приложениях.
Я иногда вижу атрибуты/читатели/писатели атрибутов в коде для моделей. Являются ли они необходимыми, если я хочу иметь возможность обновлять атрибуты из кода представления/контроллера?
Я новичок, поэтому я говорю об основных приложениях.
attr_accessor
является основной особенностью Ruby и используется для генерации переменных экземпляра с помощью методов getter и setter. Его использование никогда не требуется в базовом Ruby (это удобство).
В случае моделей ActiveRecord геттеры и сеттеры уже созданы ActiveRecord для столбцов данных. attr_accessor
не требуется или желательно.
Если у вас есть дополнительные данные экземпляра, вам не нужно сохранять (т.е. это не столбец базы данных), вы можете использовать attr_accessor
, чтобы сохранить несколько строк кода.
Аналогично названный attr_accessible
, который часто встречается в коде Rails и путается с attr_accessor
, - это устаревший метод управления массовым присвоением в моделях ActiveRecord. Rails 4 не поддерживает его из коробки; он был заменен сильными параметрами, что позволяет более гранулировать управление.
Если вы объявите attr_accessor
, вы можете использовать его как virtual attribute
, который в основном является атрибутом модели, который не сохраняется в базе данных.
Пример: вы объявляете attr_accessor :password
в своей модели User
, чтобы вы могли использовать его в качестве поля в новой пользовательской форме. Когда вы получите свой пароль в соответствующем действии create
, вы можете получить hashed_password
, сохранить его в базе данных и отбросить заданный password
(который выполняется автоматически в конце запроса).
Как правило, довольно неплохо украшать attr_accessor
для чего-либо на модели, которая не является фактическим столбцом в таблице SQL. Рельсы 4 или нет. Это дает вам четкое представление о том, что в модели и о том, что сохраняется.
Как правило, я использую attr_accessor
для атрибутов, которых нет в модели/базе данных, но я думаю, что их использование необязательно.