ere*_*ere 6 rest freebase ruby-on-rails activeresource ruby-on-rails-3
我正在尝试使用Freebase API获得activeresource(在Rails 3.2上),但我还没有太多运气.如何调试rails以查看正在发生的事情并确保请求格式正确?
我认为后缀.json导致失败,但我不知道如何检查发生了什么?
错误:
ActiveResource::ResourceNotFound: Failed. Response code = 404. Response message = Not Found.
Run Code Online (Sandbox Code Playgroud)
码:
class Freebase < ActiveResource::Base
class << self # also tried without this, same result
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 = "https://www.googleapis.com/freebase/v1/"
self.format = :json
#https://www.googleapis.com/freebase/v1/search?query=nirvana&indent=true
#Freebase.get('search', :query => 'nirvana')
end
Run Code Online (Sandbox Code Playgroud)
更新:
好的,我发现有两件事情出错......
1)我试图取代的collection_path根本不起作用..它仍然将.json附加到每个请求上.2)https://www.googleapis.com:443/freebase/v1/freebases/search.json?query=nirvana
它后来解决了freebase ...任何想法?
我也试过这个修复:
但它也没有删除JSON后缀.
更新更新:
添加了下面的建议更新,它给出了正确的路径,但现在我得到了
GET https://www.googleapis.com:443/freebase/v1/search/?query=monkey
--> 200 OK 2732 (693.3ms)
NoMethodError: undefined method `collect!' for #<Hash:0x007f9bde674900>
Run Code Online (Sandbox Code Playgroud)
BBJ*_*BJ3 17
添加 ActiveResource::Base.logger = Logger.new(STDERR)到您的config/application.rb(Rails 3.x).
你会得到如下输出:
POST http://localhost:3000/freebase.json
--> 201 Created 0 (15.8ms)
Run Code Online (Sandbox Code Playgroud)
这显示了方法和响应代码......
ActiveResource 并没有消亡,但相对于 ActiveRecord,我可以理解为什么你会这么想,它绝对是一个不被爱和弱势的继子。
您可能最好使用 Faraday_Middleware 或 HTTPParty 之类的东西。前者是我个人的偏好。除非您正在做的是从另一个 Rails 应用程序或具有完美的静态行为(如 Rails)(Freebase 没有)的应用程序中提取数据,否则 ActiveResource 通常带来的麻烦大于其价值。
话虽这么说,您可以通过执行以下操作来完成您想要的任务,而无需覆盖任何类方法:
self.site = "https://www.googleapis.com/"
self.format = :json
def self.search(word)
self.find(:all, :from => "/freebase/v1/search/", :params => { :query => word })
end
Run Code Online (Sandbox Code Playgroud)