原样,共享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
Ok ...加载Profile模型后,Location.format仍然相同 注意:这些模型是延迟加载的,因此在您尝试调用类名之前,它们的文件和代码不会包含在内。
>> Location.connection.format
=> ActiveResource::Formats::JsonFormat
这里的问题就开始了。在我们调用了Profile模型之后,它开始了Location.connection.format
>> Profile.connection.format
=> ActiveResource::Formats::JsonFormat
格式不应该是相同的。当你调用Location.find(:all,:from =&gt;“/ something.xml”)时,这会导致解析完全被破坏 - 它会尝试将xml
解析为{{1} }
我想我现在的问题是 - 如何分开两个连接? (或以其他方式解决此问题)
编辑以在控制台中添加此测试:
json
答案 0 :(得分:1)
这......感觉就像一个错误。
我在查看ActiveResource
源代码。当您在ARes类中调用format=
方法时,它会将格式写入connection.format
。
如果已定义,则此上下文中的connection
方法会抓取@@connection
,否则会调用superclass.connection
。在我们的案例中,superclass
是ActiveResource::Base
。您可以猜测,@@connection
或Location
模型上的Profile
未定义。如果您在课堂上致电self.site=
, 会被设置,在这种情况下,self.format=
方法会在connection
的特定于班级的版本上设置格式对象
在我的情况下,我没有理由为不同的ActiveResource模型使用不同的站点变量,只是一种不同的返回格式。出于这个原因,我在开发中设置ActiveResource::Base.site = "myresource.local"
(以及生产.rb env文件中的相应文件)。
所以我解决了这个问题?
class Location < ActiveResource::Base
self.site = self.site
self.format = :xml
end
是的,self.site = self.site
强制类使用它自己的连接对象。不知怎的,我觉得self.format =
也应该......
不会接受这个答案,因为它感觉像是一个黑客和/或错误,但这就是我现在解决它的方式,似乎工作。
希望其他人有这方面的想法?似乎很多人都没有使用ActiveResource,但我们每天都使用它,而且我之前遇到过这种情况。