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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top