Ruby on rails 如何在使用活动资源时从url中删除.xml和.json
当我在活动资源中进行映射时,它对RubyonRails的默认请求总是自动在url的末尾添加扩展。 例如: 我想通过如下映射从Ruby on Rails获取用户资源: class user < ActiveResource::Base self.site = 'http://localhost:3000' end 类用户< ActiveResource::Base 自助站点http://localhost:3000' 结束 我需要的是,我只想让它不带扩展名地传递url,相反,它会在url的末尾自动添加扩展名,比如 http://localhost:3000/user http://localhost:3000/user.xmlRuby on rails 如何在使用活动资源时从url中删除.xml和.json,ruby-on-rails,Ruby On Rails,当我在活动资源中进行映射时,它对RubyonRails的默认请求总是自动在url的末尾添加扩展。 例如: 我想通过如下映射从Ruby on Rails获取用户资源: class user < ActiveResource::Base self.site = 'http://localhost:3000' end 类用户< ActiveResource::Base 自助站点http://localhost:3000' 结束 我需要的是,我只想让它不带扩展名地传递url,相反,它会在ur
当我从活动资源映射发出请求时,如何省略url的扩展名?您可以通过覆盖类中的两个ActiveResource方法来实现这一点:
class User < ActiveResource::Base
class << self
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}#{query_string(query_options)}"
end
def collection_path(prefix_options = {}, query_options = nil)
prefix_options, query_options = split_options(prefix_options) if query_options.nil?
"#{prefix(prefix_options)}#{collection_name}#{query_string(query_options)}"
end
end
self.site = 'http://localhost:3000'
end
class用户 类您可以重写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一开始,我确实使用了@Joel AZEMAR的答案,在我开始使用PUT之前,它运行得非常好。
在.json/.xml中添加PUT
稍微透露一下,使用ActiveResource::Base#include_format_in_path
选项对我来说效果更好
在路径中不包含格式:
class Foo < ActiveResource::Base
self.site = 'http://localhost:3000'
end
Foo.element_path(1)
=> "/foo/1.json"
class Foo < ActiveResource::Base
self.include_format_in_path = false
self.site = 'http://localhost:3000'
end
Foo.element_path(1)
=> "/foo/1"
class Foo“/foo/1.json”
在路径中包含格式:
class Foo < ActiveResource::Base
self.site = 'http://localhost:3000'
end
Foo.element_path(1)
=> "/foo/1.json"
class Foo < ActiveResource::Base
self.include_format_in_path = false
self.site = 'http://localhost:3000'
end
Foo.element_path(1)
=> "/foo/1"
class Foo“/foo/1”
这种方法效果很好,而且比其他解决方案干净得多。谢谢