Pergunta

Eu tenho uma pergunta rápida sobre recurso ativo. Se eu tiver um recurso de usuário, quando eu faço uma chamada como

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

De acordo com a api que se traduz em esta chamada /users/1/promote.xml?position=manager

A minha pergunta é esta. É activeresource realmente fazendo duas chamadas aqui? encontrar fazendo um get, em seguida, colocar no objeto, ou faz anexando .put ao .find significa que ele só faz uma única chamada. Se isto é assim, então a única razão para a .find é a dar o formato url adequada de usuários / /: id / promover ??

Eu não poderia encontrar nos docs onde isso pode ser especificado, mas é a .find que me faz pensar que talvez duas chamadas de serviço estão ocorrendo?

Foi útil?

Solução

Se ActiveResource funciona como ActiveRecord, eu diria 'sim'. Se você fizer algo como

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

ActiveRecord primeira é que uma escolha para obter o objeto e, em seguida, emite uma chamada de atualização para o banco de dados para alterar o registro. Eu presumiria que ActiveResources funções de forma semelhante, onde ele emite duas chamadas de serviços da Internet para obter o objeto e, em seguida, atualizar o objeto.

Outras dicas

Coloque o seguinte em seu intializers:

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

Pesquisar ' "http.set_debug_output $ stderr" "ActiveResource"' para encontrar o autor original deste dica útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top