#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
предупреждение для новичков
Я смотрю один из роликов Райана Бейта о виртуальных атрибутах. Он добавляет теги к статье на платформе для ведения блога. http://media.railscasts.com/assets/episodes/videos/167-more-on-virtual-attributes.mp4
В какой-то момент у него есть рабочий код
attr_accessor :tag_names
В этом примере имена тегов не отображаются в форме, если они проверяются, поэтому он изменяет имя атрибута и добавляет метод, чтобы имена тегов сохранялись, если в другом поле произошла ошибка проверки
attr_writer :tag_names
def tag_names
@tag_names || tags.map(amp;:name).join(' ')
end
Мой вопрос в том, можете ли вы, пожалуйста, объяснить значение изменения его с attr_accessor
на attr_writer
в сочетании с добавленным им методом? Почему ему нужно было изменить имя атрибута, когда он добавил этот метод?
(обратите внимание, я прочитал документацию об attr_accessor и attr_writer, но он все еще недостаточно щелкает, поэтому я не понимаю, почему он вносит это изменение при создании этого метода)
Ответ №1:
attr_accessor: :tag_names
создает эти два метода:
def tag_names
@tag_names
end
и
def tag_names=(value)
@tag_names=value
end
Поскольку у Райана есть свой собственный tag_names
метод («reader»), ему не нужно динамически создавать его attr_accessor
. Ему нужен только метод («writer»), который создается attr_writer
.
Комментарии:
1.
attr_accessor :tag_names