Eu perdi algum tempo procurando uma forma de acessar objetos via ActiveResource de uma aplicação servidora para uma cliente.
O meu problema era que o nome do meu resource na aplicação cliente não era a correspondência exata do nome esperado no meu servidor.
Trocando em miúdos…
Eu tenho uma aplicação servidora com o seguinte controller:
class CategoriesController < ApplicationController
def index
@categories = Category.all
respond_to do |format|
format.json { render :json => @categories }
end
end
end
e outra aplicação cliente com o seguinte resource:
class RemoteCategory < ActiveResource::Base
self.site = ‘http://localhost‘
self.format = :json
end
A minha aplicação servidora roda na porta 3000, e a cliente na porta 3001.
O problema é que utilizando somente este código no meu resource, ele vai procurar pelo recurso no meu servidor utilizando o caminho:
http://localhost/remote_categories.json
O problema é que o meu servidor, obviamente , não tem esta rota. Uma vez que o controller que ele possui tem nome categories, gerando portanto a rota:
http://localhost/categories.json
Entretanto eu não podia modificar o nome do meu resource para Category, pois eu já possuía um outro model com este nome na aplicação.
Então depois de perder alguns minutos encontrei a solução.
Basta definir o nome do elemento no resource. Neste caso em particular definir o element_name no objeto RemoteCategory:
self.element_name = 'category'
A configuração final do resource RemoteCategory fica então:
class RemoteCategory < ActiveResource::Base
self.element_name = ‘category‘
self.site = ‘http://localhost‘
self.format = :json
end
Espero que seja útil para outras pessoas
0sem comentários ainda