Peut les appareils iOS envoyer des demandes PUT Rails apps?

Nous avons essayé de nombreuses fois de l'envoi de mise à jour de demandes pour notre serveur Rails et nous continuons à recevoir une erreur 404 La page que vous recherchez n'existe pas"

Notre méthode de mise à jour est très simple (pratiquement générique rails).

def update
@user = User.find(params[:id])

respond_to do |format|
  if @user.update_attributes(params[:user])
    format.html { redirect_to @user, notice: 'User was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @user.errors, status: :unprocessable_entity }
  end
end

fin

Quand je lance CURL à partir de la ligne de commande pour tester la méthode de mise à jour, il fonctionne très bien. Mais, quand j'ai essayé les mêmes méthodes en objective-c, il en résulte toujours une erreur 404.

Donc ma question est: peut-appareils iOS envoyer METTRE les requêtes vers les serveurs en utilisant NSURLConnection ou n'est-ce pas mises en œuvre?

Mise à JOUR::

Ce n'est pas de mise à jour de la base de données

NSString *dataString = @"user[first_name]=bob";
NSData *postBodyData = [NSData dataWithBytes: [dataString UTF8String] length:[dataString length]];
NSString *urlString = [NSString stringWithFormat:@"example.com/users/1.json"];
NSURL *fullURL = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:fullURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20];
[request setHTTPMethod: @"PUT"];
[request setHTTPBody:postBodyData];
self.todoConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
receivedData = [NSMutableData data];

Cela met à jour la base de données

NSString *urlString = [NSString stringWithFormat:@"example.com/users/1.json?user[first_name]=bob"];
NSURL *fullURL = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:fullURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20];
[request setHTTPMethod: @"PUT"];
self.todoConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
receivedData = [NSMutableData data];
L'affichage du code Ruby lors de votre question porte sur la prise en charge d'iOS ne sera probablement pas vous faire du bien. Si vous au lieu de poster votre code Objective-C, nous pouvons regarder et de voir si vous êtes à la définition de la méthode HTTP correctement (comme David V illustré ci-dessous).
Ouais, désolé à ce sujet. Je suis en train d'écrire les rails fin, et un autre développeur a été écrit à l'objective-c et je n'ai pas accès à son code. Il est maintenant.
Je me demande si elle a quelque chose à voir avec le fait que vous ne pouvez pas échapper à la '[' et ']' personnages. Essayez de définir le corps HTTP avec des données tirées de la chaîne @"l'utilisateur%5Bfirst_name%5D=brian".
J'ai perdu presque une journée essayant de se faire.
Cela ressemble à un trou de sécurité. Comment feriez-vous pour authentifier la requête PUT?

OriginalL'auteur Brian Weinreich | 2012-06-07