Je développe une application Rails 3 dans une capacité largement sans tabless. J'utilise savon_model et ActiveModel pour générer un comportement similaire aux équivalents ActiveRecord. Ci-dessous est mon code:La classe basée ActiveModel ne crée pas les mêmes résultats qu'un ActiveRecord équivilent
class TestClass
include Savon::Model
include ActiveModel::Validations
# Configuration
endpoint "http://localhost:8080/app/TestService"
namespace "http://wsns.test.com/"
actions :getObjectById, :getAllObjects
attr_accessor :id, :name
def initialize(hash)
@id = hash[:id]
@name = hash[:name]
end
client do
http.headers["Pragma"] = "no-cache"
end
def self.all
h = getAllObjects(nil).to_array
return convert_array_hash_to_obj(h, :get_all_objects_response)
end
def self.find(id)
h = getObjectById(:arg0 => id).to_hash
return convert_hash_to_obj(h, :get_object_by_id_response)
end
private
def self.convert_array_hash_to_obj(arrayhash, returnlabel)
results = Array.new
arrayhash.each do |hash|
results << convert_hash_to_obj(hash, returnlabel)
end
return results
end
def self.convert_hash_to_obj(hash, returnlabel)
return TestClass.new(hash[returnlabel][:return])
end
end
OK, donc tout fonctionne comme prévu; les valeurs sont extraites du service Web et sur la page. Malheureusement, lorsque je regarde le code HTML produit du côté client, il y a des problèmes. Les liens sont Afficher le long des lignes suivantes:
/testclasses/%23%3CTestClass:0xa814cb4%3E
au lieu de ...
/testclasses/1
Alors, je l'ai fait une copie de l'objet (hachage?) À la console pour comparer les sorties.
[#<System:0xa814cb4 @id="1", @name="CIS">]
au lieu de ce que je crois qu'il devrait être ...
[#<System id="1", name="CIS">]
J'ai trois questions:
1: Quel est le suffixe hexagonal sur mon nom de classe quand il est imprimé
2: Comment puis-je modifier ma classe pour correspondre à la sortie souhaitée lors de l'impression sur la console? 3: Pourquoi les liens de l'interface (Show, Edit, Delete) sont-ils brisés et y a-t-il une solution facile?
Merci beaucoup pour votre temps et excuses pour le code des ordures/questions stupides. Ceci est ma première application Ruby ou Rails!
Gareth
Eh bien, j'ai un peu plus d'informations. Je comprends que le suffixe hexadécimal est l'object_id, mais je suis toujours perplexe quant à la raison pour laquelle les liens ne fonctionnent pas. Est-ce quelque chose à voir avec route_keys ou link_tos ?! Je devine ici, donc toute lumière que vous pouvez jeter serait grandement appréciée! Merci Gareth –