Ruby on rails 在Rails中为to_xml序列化程序设置新的默认属性

Ruby on rails 在Rails中为to_xml序列化程序设置新的默认属性,ruby-on-rails,xml-serialization,Ruby On Rails,Xml Serialization,在Rails中,我编写了一系列控制器来生成XML。每次我将大量属性传递到xml时,如: to_xml(:skip_types => true, :dasherize => false) 是否有一种方法可以将这些设置为新的默认属性,在我的应用程序中调用\u xml时应用这些属性,这样我就不必重复自己的操作了?您是在哈希或ActiveRecord模型(或其他)上调用\u xml吗 我并不是说你想这么做,但是你可以很容易地将补丁修改成xml并重新定义它,从这些参数开始。我建议您为\u d

在Rails中,我编写了一系列控制器来生成XML。每次我将大量属性传递到xml时,如:

to_xml(:skip_types => true, :dasherize => false)

是否有一种方法可以将这些设置为新的默认属性,在我的应用程序中调用\u xml时应用这些属性,这样我就不必重复自己的操作了?

您是在哈希或ActiveRecord模型(或其他)上调用\u xml吗

我并不是说你想这么做,但是你可以很容易地将补丁修改成xml并重新定义它,从这些参数开始。我建议您为\u default \u xml创建一个新方法,该方法只需使用所需的参数调用\u xml即可

def to_default_xml
  self.to_xml(:skip_types => true, :dasherize => false)
end
更新:

由于您想将其添加到几个ActiveRecord模型中,您可以做两件事,打开ActiveRecord::base(这有点粗糙和脆弱),或者创建一个模块并将其导入到您想要使用的每个模型中。输入多一点,但代码更简洁

我会在lib/中放置一个类,它看起来像这样:

module DefaultXml
  def to_default_xml
    self.to_xml(:skip_types => true, :dasherize => false)
  end
end
然后在您的模型中:

class MyModel < ActiveRecord::Base
  include DefaultXml
end
classmymodel
您是在哈希或ActiveRecord模型(或其他)上调用xml吗

我并不是说你想这么做,但是你可以很容易地将补丁修改成xml并重新定义它,从这些参数开始。我建议您为\u default \u xml创建一个新方法,该方法只需使用所需的参数调用\u xml即可

def to_default_xml
  self.to_xml(:skip_types => true, :dasherize => false)
end
更新:

由于您想将其添加到几个ActiveRecord模型中,您可以做两件事,打开ActiveRecord::base(这有点粗糙和脆弱),或者创建一个模块并将其导入到您想要使用的每个模型中。输入多一点,但代码更简洁

我会在lib/中放置一个类,它看起来像这样:

module DefaultXml
  def to_default_xml
    self.to_xml(:skip_types => true, :dasherize => false)
  end
end
然后在您的模型中:

class MyModel < ActiveRecord::Base
  include DefaultXml
end
classmymodel
假设您讨论的是AR的to_xml方法,并且根据您的需要,您可以通过创建一个名为:lib\class_extensions.rb的文件来扩展AcitVereRecord类

class ActiveRecord::Base   
   def to_xml_default
      self.to_xml(:skip_types => true, :dasherize => false)
   end
end
接下来,将其放入初始值设定项中,以便在Rails启动时将其包括在内:

require 'class_extensions'
现在,您可以按如下方式使用它(不必在每个模型中特别包括它):


假设您正在讨论AR的to_xml方法,并根据您的需要,您可以通过创建一个名为:lib\class_extensions.rb的文件来扩展AcitVereRecord类

class ActiveRecord::Base   
   def to_xml_default
      self.to_xml(:skip_types => true, :dasherize => false)
   end
end
接下来,将其放入初始值设定项中,以便在Rails启动时将其包括在内:

require 'class_extensions'
现在,您可以按如下方式使用它(不必在每个模型中特别包括它):


我制作了一个插件来处理默认的序列化选项。查看github.com/laserlemon/dry_serial/tree/master

class MyModel < ActiveRecord::Base
  dry_serial :skip_types => true, :dasherize => false
end

我制作了一个插件来处理默认的序列化选项。查看github.com/laserlemon/dry_serial/tree/master

class MyModel < ActiveRecord::Base
  dry_serial :skip_types => true, :dasherize => false
end

谢谢包装器方法听起来像是一个很好的黑客使用(目前)。鉴于我将从多个控制器(在ActiveRecord模型上)调用此代码,您建议我将代码放在哪里?谢谢!包装器方法听起来像是一个很好的黑客使用(目前)。鉴于我将从多个控制器(在ActiveRecord模型上)调用此代码,您建议我将代码放在哪里?