Подтвердить что ты не робот

Почему attr_accessor необходим в Rails?

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

Я новичок, поэтому я говорю об основных приложениях.

4b9b3361

Ответ 1

attr_accessor является основной особенностью Ruby и используется для генерации переменных экземпляра с помощью методов getter и setter. Его использование никогда не требуется в базовом Ruby (это удобство).

В случае моделей ActiveRecord геттеры и сеттеры уже созданы ActiveRecord для столбцов данных. attr_accessor не требуется или желательно.

Если у вас есть дополнительные данные экземпляра, вам не нужно сохранять (т.е. это не столбец базы данных), вы можете использовать attr_accessor, чтобы сохранить несколько строк кода.

Аналогично названный attr_accessible, который часто встречается в коде Rails и путается с attr_accessor, - это устаревший метод управления массовым присвоением в моделях ActiveRecord. Rails 4 не поддерживает его из коробки; он был заменен сильными параметрами, что позволяет более гранулировать управление.

Ответ 2

Если вы объявите attr_accessor, вы можете использовать его как virtual attribute, который в основном является атрибутом модели, который не сохраняется в базе данных.

Пример: вы объявляете attr_accessor :password в своей модели User, чтобы вы могли использовать его в качестве поля в новой пользовательской форме. Когда вы получите свой пароль в соответствующем действии create, вы можете получить hashed_password, сохранить его в базе данных и отбросить заданный password (который выполняется автоматически в конце запроса).

Ответ 3

Как правило, довольно неплохо украшать attr_accessor для чего-либо на модели, которая не является фактическим столбцом в таблице SQL. Рельсы 4 или нет. Это дает вам четкое представление о том, что в модели и о том, что сохраняется.

Ответ 4

Как правило, я использую attr_accessor для атрибутов, которых нет в модели/базе данных, но я думаю, что их использование необязательно.