Ruby on rails 如何使两个不同的ActiveResource模型使用两个不同的连接对象?

Ruby on rails 如何使两个不同的ActiveResource模型使用两个不同的连接对象?,ruby-on-rails,json,format,activeresource,Ruby On Rails,Json,Format,Activeresource,事实证明ActiveResource模型之间的连接是共享的。因此,如果在一个模型中设置格式,它确实与其他模型中的格式不同。但是,如果在两个单独的模型上调用.connection.format方法,则每次设置新格式时,该格式都会更改。因此,如果以:json格式在第二秒内加载了Profile,那么两个模型的.connection.format将变成ActiveResource::Formats::JsonFormat >> Profile.connection.format =>

事实证明ActiveResource模型之间的连接是共享的。因此,如果在一个模型中设置格式,它确实与其他模型中的格式不同。但是,如果在两个单独的模型上调用
.connection.format
方法,则每次设置新格式时,该格式都会更改。因此,如果以
:json
格式在第二秒内加载了
Profile
,那么两个模型的
.connection.format
将变成
ActiveResource::Formats::JsonFormat

>> Profile.connection.format
=> ActiveResource::Formats::JsonFormat
我最初的问题完全不同(我没有完全理解到底发生了什么)-你可以查看编辑历史以查看原始版本。希望我能得到更多的回应

证明:

class Location < ActiveResource::Base
  self.format = :xml
end

class Profile < ActiveResource::Base
  self.format = :json
end
到目前为止还不错。。。
位置
模型及其连接具有正确的格式

>> 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

这个。。。感觉像个虫子

我在看
ActiveResource
源代码。在ARes类中调用
format=
方法时,它会将格式写入
connection.format

此上下文中的
connection
方法将获取
@@connection
,如果已定义,否则将调用
超类.connection
。在我们的例子中,
superclass
ActiveResource::Base
。正如您所猜测的,
位置
配置文件
模型上的
@@connection
未定义。如果在类上调用
self.site=
,它将被设置,在这种情况下,
self.format=
方法将在特定于类的
连接
对象上设置格式

在我的例子中,我没有理由对不同的ActiveResource模型使用不同的站点变量,只是使用不同的返回格式。因此,我在开发中设置了
ActiveResource::Base.site=“myresource.local”
(在production.rb env文件中也设置了相应的)

那么我解决这个问题的方法是什么

class Location < ActiveResource::Base
  self.site = self.site
  self.format = :xml
end
类位置
是的,
self.site=self.site
强制类使用自己的连接对象。不知何故,我觉得
self.format=
也应该

我现在还不打算接受这个答案,因为这感觉像是一个黑客和/或bug,但这就是我现在解决它的方式,它似乎起了作用

希望其他人对此有想法?看起来并不是很多人都在使用ActiveResource,但我们每天都在使用它,我以前也遇到过这种情况