ActiveResource モデル間の接続が共有されていることがわかります。したがって、あるモデルでフォーマットを設定すると、他のモデルのフォーマットとは異なるままになります。ただし、2 つの別々のモデルでメソッドを呼び出すと.connection.format
、新しい形式を設定するたびにその形式が変更されます。したがってProfile
、フォーマットで2番目にロードされた:json
場合.connection.format
、両方のモデルが次のようになりますActiveResource::Formats::JsonFormat
私の元の質問は完全に異なっていました (何が起こっているのか完全には理解していませんでした) - 編集履歴を見て元のバージョンを確認できます。もっと反応が返ってくるといいのですが…
証拠:
class Location < ActiveResource::Base
self.format = :xml
end
class Profile < ActiveResource::Base
self.format = :json
end
その後、rails console
...
>> Location.format
=> ActiveResource::Formats::XmlFormat
>> Location.connection.format
=> ActiveResource::Formats::XmlFormat
これまでのところ、Location
モデルとその接続は正しい形式になっています。
>> Profile.format
=> ActiveResource::Formats::JsonFormat
普通に見える、それProfile
が私が望むフォーマットです。
>> Location.format
=> ActiveResource::Formats::XmlFormat
わかりました... Profile モデルをロードした後も Location.format は同じままです 注: これらのモデルは遅延ロードされるため、クラス名を呼び出そうとするまでファイルとコードは含まれません。
>> Location.connection.format
=> ActiveResource::Formats::JsonFormat
そして、ここから問題が始まります。Profile モデルを呼び出した後、Location.connection.format
>> Profile.connection.format
=> ActiveResource::Formats::JsonFormat
フォーマットは同じである必要はありません。xml
これにより、 Location.find(:all, :from => "/something.xml") のようなものを呼び出すと、解析が完全に壊れます- asを解析しようとしますjson
私の質問は今だと思います-2つの接続をどのように分離しますか? (または、この問題を解決する)
編集してコンソールにこのテストを追加します。
>> Location.connection == Profile.connection
=> true