新手提醒
我正在观看Ryan Bate关于虚拟属性的RailsCasts之一。他正在为博客平台上的文章添加标签。 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(&:name).join(' ')
end
我的问题是,您能否解释将其从attr_accessor
更改为attr_writer
的重要性以及他添加的方法? 为什么他在添加该方法时需要更改属性名称?
(请注意,我已经阅读了有关attr_accessor和attr_writer的文档,但它仍然没有点击,所以我不知道为什么他在创建该方法时进行此更改)
答案 0 :(得分:13)
attr_accessor: :tag_names
创建了这两种方法:
def tag_names
@tag_names
end
和
def tag_names=(value)
@tag_names=value
end
因为Ryan有自己的tag_names
(“读者”)方法,所以他不需要使用attr_accessor
动态创建它。他只需要attr_writer
创建的(“作家”)方法。