rails activeresource messages
-
08-07-2019 - |
Question
J'ai une petite question à propos de la ressource active. Si j'ai une ressource utilisateur, quand je fais un appel comme
User.find(1).put(:promote, :position => 'manager')
Selon l’API, cet appel est traduit par /users/1/promote.xml?position=manager
Ma question est la suivante. Est-ce que Activeresource passe actuellement deux appels ici? trouver faire un get, puis mettre cet objet, ou bien ajouter .put au .find signifie qu'il ne fait qu'un seul appel. Si tel est le cas, la seule raison pour laquelle le fichier .find a été détecté est de donner le format d’URL approprié de / users /: id / PROMEDREC
.Je ne pouvais pas trouver dans la documentation où cela pourrait être spécifié, mais c'est le .find qui me fait penser à peut-être que deux appels de service ont lieu?
La solution
Si ActiveResource fonctionne comme ActiveRecord, je dirais "oui". Si vous faites quelque chose comme
Foo.find(1).update_attributes(:name=>"Bar")
ActiveRecord effectue d'abord une sélection pour obtenir l'objet, puis émet un appel de mise à jour à la base de données pour modifier l'enregistrement. Je présume que ActiveResources fonctionne de la même manière qu’il lance deux appels de services Web pour obtenir l’objet, puis le mettre à jour.
Autres conseils
Mettez les éléments suivants dans vos initiales:
class ActiveResource::Connection
# Creates new Net::HTTP instance for communication with
# remote service and resources.
def http
http = Net::HTTP.new(@site.host, @site.port)
http.use_ssl = @site.is_a?(URI::HTTPS)
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl
http.read_timeout = @timeout if @timeout
#Here's the addition that allows you to see the output
http.set_debug_output $stderr
return http
end
end
Recherche '" http.set_debug_output $ stderr " "ActiveResource" pour rechercher l’auteur original de cette astuce utile.