Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从ActiveResource请求中删除.xml扩展名_Ruby On Rails_Xml_Api_Rest_Activeresource - Fatal编程技术网

Ruby on rails 从ActiveResource请求中删除.xml扩展名

Ruby on rails 从ActiveResource请求中删除.xml扩展名,ruby-on-rails,xml,api,rest,activeresource,Ruby On Rails,Xml,Api,Rest,Activeresource,我试图使用ActiveResource来使用来自第三方API的xml数据。我可以使用RESTClient应用程序成功地进行身份验证并发出请求。我对我的应用程序进行了编码,当我发出请求时,我得到一个404错误。我补充说: ActiveResource::Base.logger = Logger.new(STDERR) 找到我的development.rb文件并解决了问题。API使用xml数据响应不以xml结尾的请求。例如,这在RESTClient中有效: https://api.example

我试图使用ActiveResource来使用来自第三方API的xml数据。我可以使用RESTClient应用程序成功地进行身份验证并发出请求。我对我的应用程序进行了编码,当我发出请求时,我得到一个404错误。我补充说:

ActiveResource::Base.logger = Logger.new(STDERR) 
找到我的development.rb文件并解决了问题。API使用xml数据响应不以xml结尾的请求。例如,这在RESTClient中有效:

https://api.example.com/contacts
但是ActiveResource正在发送此请求

https://api.example.com/contacts.xml
是否有“好”的方法从ActiveResource生成的请求中剥离扩展


谢谢

您可能需要覆盖模型中的方法

根据API,当前的定义如下:

def element_path(id, prefix_options = {}, query_options = nil)
  prefix_options, query_options = split_options(prefix_options) if query_options.nil?  
  "#{prefix(prefix_options)}#{collection_name}/#{id}.#{format.extension}#{query_string(query_options)}"
end

删除.#{format.extension}部分可能会满足您的需要。

您可以重写ActiveResource::Base的方法

在/lib/active\u resource/extend/目录中添加此库别忘了取消注释
config/application.rb中的“config.autoload_路径+=%W(#{config.root}/lib)”

module-ActiveResource#:nodoc:
模块扩展
无扩展的模块
模块类方法
带有扩展名(*args)的def元素路径
不带扩展名(*args).gsub(/.json |.xml/,'')的元素路径
结束
带有扩展名(*args)的定义新元素路径
不带扩展名(*args).gsub(/.json |.xml/,'')的新元素路径
结束
带有扩展名(*args)的def集合路径
不带扩展名(*args).gsub(/.json |.xml/,'')的集合路径
结束
结束
def自带(基本)
基本类\u评估do
扩展类方法

class以类为基础重写中提到的
\u路径
访问器要简单得多,而不是在整个ActiveResource应用程序范围内进行猴子补丁,这可能会干扰依赖ActiveResource的其他资源或gem

只需将这些方法直接添加到类中:

class联系人
如果要在同一个API中访问多个RESTful资源,那么应该定义自己的基类,在其中可以驻留公共配置。对于自定义
\u路径
方法,这是一个更好的地方:

#app/models/api/base.rb
类Api::Base
您可以通过以下方式从路径中排除格式字符串:

class MyModel < ActiveResource::Base
  self.include_format_in_path = false
end
classmymodel
是的,这就是关键所在。我发现这篇文章更深入地介绍了如何使用ActiveResource和API。请注意,从rails 3开始,您可能希望将其放在应用程序顶级目录的/extras下(而不是/lib下),因为如果您取消对config/application.rb中的正确注释,rails将自动加载该目录。这是一个相当繁重的解决方案,可以修改ActiveResource应用程序范围内的行为。更本地化的解决方案可能更好,具体取决于需求。请注意,这仅适用于ActiveResource 4。如果您停留在3.2.x或更早版本,它将引发异常。
class MyModel < ActiveResource::Base
  include ActiveResource::Extend::WithoutExtension
end
class MyModel < ActiveResource::Base
  self.include_format_in_path = false
end