Rails では、一連のコントローラーをコーディングして XML を生成しています。次のように、多くのプロパティを to_xml に渡すたびに:
to_xml(:skip_types => true, :dasherize => false)
自分のアプリで to_xml が呼び出されるたびに適用される新しいデフォルト プロパティとしてこれらを設定して、自分自身を繰り返す必要がないようにする方法はありますか?
Rails では、一連のコントローラーをコーディングして XML を生成しています。次のように、多くのプロパティを to_xml に渡すたびに:
to_xml(:skip_types => true, :dasherize => false)
自分のアプリで to_xml が呼び出されるたびに適用される新しいデフォルト プロパティとしてこれらを設定して、自分自身を繰り返す必要がないようにする方法はありますか?
ハッシュまたは 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
デフォルトのシリアル化オプションを処理するプラグインをまとめました。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)
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