Rails 2.通过update_attributes调用虚拟属性的setter

时间:2012-10-08 15:04:50

标签: ruby-on-rails attr update-attributes attr-accessor

我的表单中有一个额外的属性(:pagesize),它不在数据库中。 还有一个安装者:

def pagesize= pagesize
  self.preferences["pagesize"] = pagesize
end

我想要'update_attributes'方法来调用该setter。 什么是最好的类型:pagesize属性? attr_accessor,attr_writer ...

2 个答案:

答案 0 :(得分:1)

如果您的模型中未定义该属性,您只需定义setter,然后执行您想要的任何逻辑:

class YourModel < ActiveRecord::Base

  attr_writer :pagesize

  def pagesize=(val)
    self.size_of_page = val
  end

end
像这样的事情。我写了AR版本,因为我假设你正在使用它,但DataMapper或mongoid的原理是相同的。

答案 1 :(得分:1)

你可以在attr_accessor变量上调用update_attributes,但需要将其定义为access。此外,如果你将变量定义为attr_writer,你不需要定义一个setter方法,因为它在后端添加了。结帐Why use Ruby's attr_accessor, attr_reader and attr_writer?了解更多信息