2010-08-16 6 views
2

J'essaie actuellement de m'intégrer à une API tierce utilisant une ressource active.Routes actives imbriquées de ressources

J'ai accompli une grande partie du travail, mais je suis aux prises avec une seule ressource imbriquée.

/company/:company_id/users/:id 

Je peux récupérer les utilisateurs de l'entreprise à l'aide

API :: Company.find (124343) .users

mais toute modification ultérieure à un utilisateur ne sauveront pas.

Je sais que je dois jouer avec l'attribut Base.site pour accepter l'argument, je ne trouve tout simplement pas comment définir l'attribut. Par exemple, dans l'enregistrement utilisateur, il a une valeur company_id. Ainsi, l'obtention de la company_id est facile, je ne peux pas travailler comment obtenir l'URL pour contenir correctement et donc sa ne va pas à la bonne route, en allant au lieu quelque part comme

/company//users/32435 
+0

Pouvez-vous indiquer comment vous générez actuellement l'URL? – mark

+0

Je crée une nouvelle classe et hérite de ActiveResource :: Base (Base

+0

Hey ça vous dérangerait de modifier votre publication originale et de copier verbatim les routes.rb et aussi le formulaire qui génère l'URL. – Trip

Répondre

1

Essayez cette

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 

Dans votre contrôleur, vous ferez

@test=ABC.find(params[:customer_id],params[:id]) 

et cela reviendriez les données de api. Dites-moi si cela fonctionne pour vous.

Questions connexes