加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – ActiveResource如何从具有单数名称的REST API

发布时间:2020-12-16 19:22:06 所属栏目:百科 来源:网络整理
导读:我试图从具有以下API的第三方库中获取数据: https://foo.com/user.json?username=u0026lt;USERNAMEu0026gt; 我无法弄清楚如何强制ActiveResource使用“user.json”而不是“users.json”.可能吗? 我使用了reactive_resources gem …有没有办法在纯粹的Act
我试图从具有以下API的第三方库中获取数据:

https://foo.com/user.json?username=u0026lt;USERNAMEu0026gt;

我无法弄清楚如何强制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的动态性质来改变基本行为时,它只是猴子修补,这是在面向对象编程中做事的一种完全合法的方式.但是,Ruby社区并没有太多使用OOP,几乎忽略了继承而支持更松散(和不太好的)混合,并且只使用duck-typing来实现多态.

不得不混淆ActiveResource来构建一个URL,你无法重新定义Web服务以接受ActiveResource约定的问题是许多人使用HTTParty的原因. “如果你必须构建URL,也可以使用HTTParty.”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读