trilhos mensagens ActiveResource
-
08-07-2019 - |
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?
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.