Rails attr_accessor и attr_writer

#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