Когда вы используете attr_reader/attr_writer/attr_accessor в моделях Rails?
Использование attr_accessor в Rails
Ответ 1
attr_accessor может использоваться для значений, которые вы не хотите хранить в базе данных напрямую, и которые будут существовать только для жизни объекта (например, паролей).
attr_reader может использоваться как одна из нескольких альтернатив для выполнения примерно так:
def instance_value
  "my value"
end
		Ответ 2
Никогда, если у вас нет конкретной необходимости. Для вас созданы автоматические средства доступа к базе данных, поэтому вам не нужно беспокоиться.
Любой attr_accessor, который вы создаете, изменит соответствующий объект @attr на объект rails, но он будет потерян, когда объект будет уничтожен, если вы не вернете его в базу данных. Иногда вам действительно нужно это поведение, но это необычно в приложении rails.
Теперь в рубине это совсем другая история, и вы в конечном итоге используете их очень часто. Но я был бы удивлен, если бы вы нуждались в них в рельсах - особенно изначально.
Ответ 3
Модели Rails - это только рубиновые классы, которые наследуют от ActiveRecord::Base. ActiveRecord использует attr_accessor для определения геттеров и сеттеров для имен столбцов, которые относятся к таблице классов ruby. Важно отметить, что это только для настойчивости; модели по-прежнему остаются только рубиновыми классами.
 attr_accessor :foo является просто ярлыком для следующего:
def foo=(var)
  @foo = var
end
def foo
  @foo
end
 attr_reader :foo является просто ярлыком для следующего:
def foo
  @foo
end
 attr_writer :foo является ярлыком для следующего:
def foo=(var)
  @foo = var
end
 attr_accessor - это ярлык для геттера и сеттера, а attr_reader - ярлык для геттера, а attr_writer - ярлык только для установщика.
В рельсах ActiveRecord использует эти геттеры и сеттеры удобным способом для чтения и записи значений в базу данных. НО, база данных - это только уровень сохранения. Вы должны иметь возможность использовать attr_accessor и attr_reader, как и любой другой класс ruby, чтобы правильно составить свою бизнес-логику. Поскольку вам нужно получить и установить атрибуты ваших объектов за пределами того, что вам нужно сохранить в базе данных, используйте attr_ соответственно.
Дополнительная информация:
http://apidock.com/ruby/Module/attr_accessor
Ответ 4
Если вы используете его для подтверждения принятия условий terms_of_service, вы должны действительно рассмотреть возможность использования validates: terms_of_service,: принятие = > true. Он создаст виртуальный атрибут и будет гораздо более кратким.
http://guides.rubyonrails.org/active_record_validations.html#acceptance.
Ответ 5
Одним из примеров является наличие нескольких параметров, хранящихся в одном сериализованном столбце. Конструктор форм будет жаловаться, если вы попытаетесь создать текстовое поле для одного из этих параметров. Вы можете использовать attr_accessor для подделки, а затем в действии обновления сохранить его в сериализованном столбце.