gpt4 book ai didi

ruby-on-rails - ActiveResource 如何从具有单数名称的 REST API 中获取资源?

转载 作者:行者123 更新时间:2023-12-04 03:43:26 25 4
gpt4 key购买 nike

我正在尝试从具有如下 API 的第三方库中获取数据:
https://foo.com/user.json?username=<USERNAME>
我不知道如何强制 ActiveResource 使用“user.json”而不是“users.json”。是否可以?

我让它与reactive_resources gem一起工作......有没有办法在纯ActiveResources中做到这一点?

最佳答案

class User < ActiveResource::Base
self.element_name = "user"
end

接下来,您将询问如何从 URL 中获取一个元素,该元素在 ActiveResource 中看起来是//foo.com/user.json 而不是//foo.com/user/.json
User.find(:one, :from => "https://foo.com/user.json?username=#{<USERNAME>}"

编辑以回应评论

有没有办法做到这一点,而不必每次我想使用 find() 时都输入请求的完整 URL?

一种方法是在类中定义一个方法来为您完成完整的 URL。
class User < ActiveResource::Base
self.element_name = "user"

def self.find_by_username(username)
find(:one, :from => "https://foo.com/user.json?username=#{username}"
end

def find
self.class.find(:one, :from => "https://foo.com/user.json?username=#{username}"
end
end

另一种方法是重新定义 element_path。
class User < ActiveResource::Base
self.element_name = "user"

def self.element_path(id, prefix_options = {}, options = {})
"https://foo.com/user.json?username=#{prefix_options["user_id"]}"
end
end

有些人称之为猴子补丁,有些人称之为面向对象编程。我说,当您进入代码或使用 Ruby 的动态特性来改 rebase 本行为时,这只是猴子修补,这是在面向对象编程中做事的一种完全合法的方式。然而,Ruby 社区很少使用 OOP,几乎忽略了继承,而支持更松散(并且表现不太好)的混合,并且只使用鸭子类型来实现多态性。

必须使用 ActiveResource 来构建 URL 的问题是,您无法重新定义 Web 服务以接受 ActiveResource 约定,这就是许多人改用 HTTParty 的原因。 “如果非要建网址,还不如用HTTParty。”

关于ruby-on-rails - ActiveResource 如何从具有单数名称的 REST API 中获取资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12607833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com