0

Rails では、一連のコントローラーをコーディングして XML を生成しています。次のように、多くのプロパティを to_xml に渡すたびに:

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

自分のアプリで to_xml が呼び出されるたびに適用される新しいデフォルト プロパティとしてこれらを設定して、自分自身を繰り返す必要がないようにする方法はありますか?

4

3 に答える 3

3

ハッシュまたは ActiveRecord モデル (またはその他のもの) で to_xml を呼び出していますか?

私はあなたがそうしたいとは思いませんが、簡単に to_xml にモンキー パッチを適用し、それらのパラメーターで開始するように再定義することができます。必要なパラメーターを指定して単に to_xml を呼び出す新しいメソッド to_default_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
于 2008-12-22T20:45:49.120 に答える
1

デフォルトのシリアル化オプションを処理するプラグインをまとめました。github.com/laserlemon/dry_serial/tree/master で確認してください。

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

また、次のように呼び出すことができる複数のシリアル化スタイルもサポートしています。

@my_model.to_xml(:skinny)
@my_model.to_xml(:fat)
于 2009-08-28T23:26:05.063 に答える
0

AR の to_xml メソッドについて話していると仮定すると、必要に応じて、lib\class_extensions.rb という名前のファイルを作成することで、AcitveRecord クラスを拡張することができます。

class ActiveRecord::Base   
   def to_xml_default
      self.to_xml(:skip_types => true, :dasherize => false)
   end
end

次に、これを初期化子に入れて、Rails の起動時に含まれるようにします。

require 'class_extensions'

これで、次のように使用できます (各モデルに具体的に含める必要はありません)。

MyModel.to_xml_default
于 2009-08-11T17:39:24.367 に答える