新手警报
我正在观看Ryan Bate关于虚拟属性的RailsCast之一。他正在博客平台上为文章添加标签。 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的文档,但是点击量仍然不够,所以我不明白为什么他在创建该方法时进行了此更改)
最佳答案
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
创建的(“writer”)方法。关于ruby-on-rails - Rails的attr_accessor和attr_writer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7774957/