Domanda

Ho una domanda veloce sulla risorsa attiva. Se ho una risorsa utente, quando faccio una chiamata come

User.find(1).put(:promote, :position => 'manager')

Secondo l'API si traduce in questa chiamata /users/1/promote.xml?position=manager

La mia domanda è questa. Activeresource sta effettivamente effettuando due chiamate qui? trova fare un get, quindi mettere quell'oggetto o aggiungere .put a .find significa che effettua una sola chiamata. In questo caso, l'unica ragione per cui .find è il formato url corretto di / users /: id / promotion ??

Non sono riuscito a trovare nei documenti dove questo potrebbe essere specificato, ma è il .find che mi fa pensare che forse due chiamate di servizio sono in corso?

È stato utile?

Soluzione

Se ActiveResource funziona come ActiveRecord, direi "sì". Se fai qualcosa del genere

Foo.find(1).update_attributes(:name=>"Bar")

ActiveRecord effettua prima una selezione per ottenere l'oggetto, quindi invia una chiamata di aggiornamento al database per modificare il record. Presumo che ActiveResources funzioni in modo simile quando emette due chiamate ai servizi Web per ottenere l'oggetto e quindi aggiornarlo.

Altri suggerimenti

Inserisci quanto segue nei tuoi inizializzatori:

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

Cerca '" http.set_debug_output $ stderr " & Quot; ActiveResource "' per trovare l'autore originale di questo utile suggerimento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top