Rails attr_accessor和attr_writer

时间:2011-10-15 00:41:04

标签: ruby-on-rails ruby

新手提醒

我正在观看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的文档,但它仍然没有点击,所以我不知道为什么他在创建该方法时进行此更改)

1 个答案:

答案 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创建的(“作家”)方法。