我目前正在尝试使用活动资源与第三方API集成。
我完成了大量的工作,但我正在努力使用单一的嵌套资源。
/company/:company_id/users/:id
我可以使用
从公司检索用户API :: Company.find(124343)。用户
但对用户的任何后续更改都不会保存。
我知道我必须使用Base.site属性来接受参数,我只是找不到如何设置属性。例如,在用户记录中,它具有company_id值。所以获取company_id很容易,我只是无法弄清楚如何正确地包含URL,因此它不会到达正确的路径,而是去某个地方
/company//users/32435
答案 0 :(得分:1)
试试这个
Class ABC
require "rubygems"
#This code block just makes sure not to append .json to the call
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
#Ur site url
ActiveResource::Base.site = 'http://aaa:8080/'
self.format = :json
self.collection_name= "/company/"
def self.find(company_id, id)
x = superclass.find(:all, :from => '/company/%s/users/%s' %[company_id,id])
x
end
end
在您的控制器中,您将
@test=ABC.find(params[:customer_id],params[:id])
这将从api返回数据。 让我知道它是否适合你。
答案 1 :(得分:0)
假设您有一个基类,例如:
class Base < ActiveResource::Base
self.site = 'http://my.api.com/'
end
您可以使用 prefix
setter 获得带有嵌套路径的资源:
class User < Base
self.prefix = '/companies/:company_id/'
end
# Do stuff ...
User.find(:all) # => ActiveResource::MissingPrefixParam
User.find(:all, company_id: 5) # => GET https://my.api.com/companies/5/users
User.find(10, company_id: 5) # => GET https://my.api.com/companies/5/users/10
像往常一样,rails 文档有很多很好的信息和示例:Active Resource Docs