Ruby on rails 如何使两个不同的ActiveResource模型使用两个不同的连接对象?
事实证明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 =>
.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,但我们每天都在使用它,我以前也遇到过这种情况