2

我目前正在尝试使用活动资源与第三方 API 集成。

我已经完成了大量的工作,但正在为单一的嵌套资源而苦苦挣扎。

/company/:company_id/users/:id

我可以使用从公司检索用户

API::Company.find(124343).users

但对用户的任何后续更改都不会保存。

我知道我必须使用 Base.site 属性来接受参数,我只是找不到如何设置属性。例如,在用户记录中,它有一个 company_id 值。所以获取 company_id 很容易,我只是无法弄清楚如何让 URL 正确包含它,因此它不会去正确的路线,而是去像这样的地方

/company//users/32435
4

2 回答 2

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 返回数据。请让我知道这对你有没有用。

于 2013-07-16T22:11:52.537 回答
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

于 2021-04-20T09:02:33.520 回答