0

我有一个关于活动资源的快速问题。如果我有一个用户资源,当我打电话时

User.find(1).put(:promote, :position => 'manager')

根据 api 它转换为这个调用 /users/1/promote.xml?position=manager

我的问题是这个。activeresource 实际上在这里打了两个电话吗?find 执行 get,然后放置该对象,或者将 .put 附加到 .find 是否意味着它只进行一次调用。如果是这样,那么 .find 的唯一原因是提供 /users/:id/promote 的正确 url 格式?

我在文档中找不到可能指定它的地方,但正是 .find 让我觉得可能发生了两个服务调用?

4

2 回答 2

0

如果 ActiveResource 像 ActiveRecord 一样工作,我会说“是”。如果你做类似的事情

Foo.find(1).update_attributes(:name=>"Bar")

ActiveRecord 首先进行选择以获取对象,然后向数据库发出更新调用以更改记录。我假设 ActiveResources 以类似的方式运行,它发出两个 Web 服务调用以获取对象,然后更新对象。

于 2009-05-07T18:40:49.230 回答
0

将以下内容放入您的初始化程序中:

class ActiveResource::Connection
  #   Creates new Net::HTTP instance for communication with
  #   remote service and resources.
  def http
    http = Net::HTTP.new(@site.host, @site.port)
    http.use_ssl = @site.is_a?(URI::HTTPS)
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl
    http.read_timeout = @timeout if @timeout
    #Here's the addition that allows you to see the output
    http.set_debug_output $stderr
    return http
  end
end

搜索 '"http.set_debug_output $stderr" "ActiveResource"' 以找到此有用提示的原作者。

于 2011-04-01T06:09:19.540 回答