rieles activateesource mensajes
-
08-07-2019 - |
Pregunta
Tengo una pregunta rápida sobre el recurso activo. Si tengo un recurso de usuario, cuando hago una llamada como
User.find(1).put(:promote, :position => 'manager')
Según la API, se traduce en esta llamada /users/1/promote.xml?position=manager
Mi pregunta es esta. ¿Activeresource realmente está haciendo dos llamadas aquí? encuentra hacer un get, luego poner ese objeto, o agregar .put al .find significa que solo hace una sola llamada. Si es así, entonces la única razón para el .find es dar el formato de URL apropiado de / users /: id / promote ??
No pude encontrar en los documentos dónde se podría especificar esto, pero es el .find lo que me hace pensar que tal vez se están realizando dos llamadas de servicio.
Solución
Si ActiveResource funciona como ActiveRecord, diría 'sí'. Si haces algo como
Foo.find(1).update_attributes(:name=>"Bar")
ActiveRecord primero realiza una selección para obtener el objeto y luego emite una llamada de actualización a la base de datos para cambiar el registro. Supongo que ActiveResources funciona de manera similar cuando emite dos llamadas de servicios web para obtener el objeto y luego actualizar el objeto.
Otros consejos
Ponga lo siguiente en sus inicializadores:
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
Buscar '" http.set_debug_output $ stderr " " ActiveResource " ' para encontrar el autor original de este útil consejo.