如何记录ActiveResource使用的URL?

mac*_*ost 22 logging ruby-on-rails activeresource

Rails ActiveResource很棒......除了一件事:据我所知,没有办法看到它在幕后使用的是什么URL.例如,假设我有一个名为Issue的ActiveResource,用于myIssues.com/issues.xml上的web服务.如果我做:

Issue.find(:all, :params => {:page => 2})
Run Code Online (Sandbox Code Playgroud)

我希望ActiveResource可以调用:

myIssues.com/issues.xml?page=2
Run Code Online (Sandbox Code Playgroud)

......但我实际上并不知道.据我所知,ActiveResource可能已经决定它不喜欢单词"page",所以它实际上使用:

myIssues.com/issues.xml?mod_page=2
Run Code Online (Sandbox Code Playgroud)

这使调试变得困难.现在我有一种情况,如果我转到我认为 ActiveResource正在使用的URL ,它可以正常工作.但是,当我实际使用ActiveResource时,它不起作用.看到它的GETing会对此非常有帮助,所以...

有没有人知道记录(或以其他方式输出;如果有一些资源,也可以很好地工作的方法)的方法,ActiveResource用来做它的东西的URL?

Jef*_*ire 24

如果您environment.rb将以下行添加到您的文件中,它将至少记录请求,以便您知道URL ActiveResource正在命中:

ActiveResource::Base.logger = ActiveRecord::Base.logger
Run Code Online (Sandbox Code Playgroud)

我仍在寻找一个更好的解决方案,向我展示响应和发布更新呼叫的数据,但至少这是朝着正确方向迈出的一步.我真的不确定为什么ActiveResource要开始使用单独的记录器,但这是另一回事.


zwi*_*ton 7

我刚刚遇到了同样的问题,并在我寻找答案时遇到了这篇文章.我发现的,事实证明是有用的,是ActiveResource :: Base上的collection_path方法.例如,假设您拥有以下资源:

class UserPost < ActiveResource::Base
    self.site = "http://someApp.com/user/:user_id"
    self.element_name = "post"
Run Code Online (Sandbox Code Playgroud)

如果你去rails控制台,这里有一些输出的例子:

>> UserPost.collection_path
"/user//post"
>> UserPost.collection_path(:user_id => 5)
"/user/5/post
Run Code Online (Sandbox Code Playgroud)

这应该为您提供确定ActiveResource如何将请求转换为URL所需的确切内容.