【问题标题】:Rails 4 to_xml issue with accessor overwriting in modelRails 4 to_xml 问题与模型中的访问器覆盖
【发布时间】:2013-04-09 11:08:56
【问题描述】:

我在覆盖模型中的访问器并稍后在模型上使用to_xml 方法时遇到问题。问题是,to_xml 似乎使用默认的 getter 方法,而不是使用 read_attribute

我的模特:

class Announcement < ActiveRecord::Base
  ...

  def created_at
    date = self[:created_at]
    "#{german_date(date)} #{german_time(date)} #{I18n.t(:clock)}"
  end

  ...
end

我使用它是为了在我的 haml 视图中轻松运行参数,始终使用正确的标签和 text_fields 方法。因为我需要修改一些属性来显示,所以我覆盖了访问器。

-# Minified example ...
= form_for ...
  - %i(a b c d e).each do |attr|
    = f.label attr
    = f.text_field attr

问题是:当我运行to_xml 时,我遇到了这个问题:

NoMethodError: undefined method `xmlschema' for "15.03.2009 18:17 Uhr":String

显然,to_xml 使用的是我的自定义 getter,而不是 read_attribute(:created_at),这会给出正确的值。我很惊讶在其他地方没有发现这个问题,但是有解决这个问题的方法吗?

【问题讨论】:

    标签: model ruby-on-rails-4 ruby-2.0 export-to-xml


    【解决方案1】:

    有一种方法可以使用选项和带有to_xml的块

    announcment.to_xml(except: :created_at, procs: -> (options, record) {
      options[:builder].tag!("created-at", record.read_attribute(:created_at))
    })
    

    不过,这并不漂亮。我只会为您的视图使用装饰器,而无需理会模型属性方法,Draper 与 Rails 4 配合得很好。

    【讨论】:

    • 我接受它是因为 Draper 的小费。它似乎是一个伟大的宝石!但是第一个“解决方案”太麻烦了。
    猜你喜欢
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多