J'appelle une application de rails d'un autre utilisant ActiveResource. Je dois fournir l'identifiant du nouvel objet à la première application (oui, contrôleur créer dans cette application sait comment gérer la réception d'un identifiant), donc je fais quelque chose comme ceci:ActiveResource peut-il POST créer au lieu de PUTTing quand un ID est spécifié?
a = ActiveResourceModel.new(:id => 1231231, :name => "test")
a.save
Cependant, au lieu de faire POST pour créer une nouvelle ressource PUT, provoquant l'application réceptrice à essayer de mettre à jour la ressource avec l'ID 1231231, qui bien sûr n'existe pas (je veux le créer!), Donc je finis par recevoir une erreur 404 à cause de ce.
En faisant quelques tests le problème semble être dans ActiveResourceModel.new? qui renvoie false, alors que ActiveResourceModel.exists? renvoie false aussi (Great, deux méthodes qui sont supposées être opposées retournent la même chose!).
J'ai oublié d'ajouter, créer est le même que nouveau + enregistrer. La chose id ... Les entités que je vais créer sont les mêmes dans les deux applications et doivent être synchronisées. Au lieu d'avoir un mappage entre les identifiants de chaque application, nous avons décidé qu'il serait plus facile d'utiliser les uuids comme identifiants et de les transmettre. – diegogs
create essaie de publier la ressource directement. http://github.com/rails/rails/blob/master/activeresource/lib/active_resource/base.rb#L1327 Vous devriez éviter la réplication comme celle-ci. une troisième application pour centrer les données communes peut être moins problématique. – Lucas