【问题标题】:Rails 2. Calling virtual attribute's setter by update_attributesRails 2. 通过 update_attributes 调用虚拟属性的设置器
【发布时间】:2012-10-08 15:04:50
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    class YourModel < ActiveRecord::Base
    
      attr_writer :pagesize
    
      def pagesize=(val)
        self.size_of_page = val
      end
    
    end
    

    类似的东西。我写了 AR 版本,因为我假设你正在使用它,但是 DataMapper 或 mongoid 的原理是相同的。

    【讨论】:

    • 顺便说一句,我认为你可以不用 attr_writer,只要你不想存储值。 attr_writer 在这种情况下为您提供了一个实例 var @pagesize。您只能在内部使用它,而不能从外部访问它。但这仅在您确实需要该变量时才值得。否则setter方法就足够了。
    【解决方案2】:

    您可以在 attr_accessor 变量上调用 update_attributes,但需要将其定义为可访问的。此外,如果您将变量定义为 attr_writer,则无需定义 setter 方法,因为它已添加到后端。结帐Why use Ruby's attr_accessor, attr_reader and attr_writer?了解更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多