Оказывается, соединение между моделями ActiveResource является общим. Таким образом, если вы установите формат в одной модели, останется отличным от формата в других моделях. Однако, если вы вызываете метод .connection.format
на двух отдельных моделях, этот формат изменяется каждый раз, когда вы устанавливаете новый формат. Таким образом, если Profile
был загружен в секунду в формате :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
Хорошо ... Location.format остается тем же после загрузки модели профиля.
Примечание : эти модели загружаются отложенным образом, поэтому их файлы и код не включаются, пока вы не попытаетесь вызвать имя класса.
>> Location.connection.format
=> ActiveResource::Formats::JsonFormat
И тут начинается проблема. После того, как мы позвонили в модель профиля, она обнаружила Location.connection.format
>> Profile.connection.format
=> ActiveResource::Formats::JsonFormat
Форматы не должны быть одинаковыми. Это приводит к тому, что синтаксический анализ полностью прерывается, когда вы вызываете что-то вроде Location.find (: all,: from => "/something.xml") - он пытается проанализировать xml
как json
Полагаю, мой вопрос сейчас - как мне разделить две связи? (Или иным образом решить эту проблему)
Изменить, чтобы добавить этот тест в консоль:
>> Location.connection == Profile.connection
=> true