新手警报

我正在观看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/

10-11 10:46