Rails 4 API mit starken Parametern?

9

Ich baue eine einfache API mit Rails 4, aber mit meiner "create" -Methode geht alles furchtbar schief.

Hier ist der relevante Teil meiner routes Datei:

%Vor%

Hier ist der api / v1 / users_controller.rb:

%Vor%

Immer wenn ich versuche, eine API mit JSON hinzuzufügen, bekomme ich "{" errors ": {" name ": [" kann nicht leer sein "]}}"

Es funktioniert, um einen Benutzer mit meinem regulären Controller zu erstellen, aber ich habe das Gefühl, dass mein API-Controller wegen der starken Parameter durcheinander gerät.

Irgendwelche Vorschläge, wie Sie dies in Rails 4 richtig machen? Außerdem habe ich einige Has-Many-Through-Beziehungen durch mein Benutzermodell. Der User-Controller der API sollte das auf Anhieb sehen können, oder?

Danke

BEARBEITEN:

Ich erhalte jetzt diesen Fehler:

BEARBEITEN:

%Vor%

BEARBEITEN WIEDER

Auch wenn ich den User-Parameter in meinem JSON-Aufruf hinzufüge, gibt es immer noch den gleichen Fehler des: user param fehlt. Verwende ich starke Parameter falsch? In meinem "normalen" users_controller kann ich einen Benutzer leicht mit einem Formular erstellen, das ich eingerichtet habe, aber mit diesem API-Controller kann ich anscheinend keinen mit JSON erstellen. Irgendwelche anderen Vorschläge?

NOCH WIEDER ÄNDERN Hier ist das Protokoll vom Start bis zum Fehler

%Vor%

BEARBEITEN # 6 Hier ist mein "echter" user_controller, der in meiner App und nicht in meiner API lebt. Das Formular erstellt einen Benutzer von diesem Controller und NICHT den API-Controller.

%Vor%

ALSO - Das Benutzerformular

%Vor%

Hier ist meine user.rb-Datei

%Vor%

Hier ist, was ich in meiner Routes-Datei habe:

%Vor%

Meine POST-Anfrage

POST / api / v1 / Benutzer HTTP / 1.1 Gastgeber: localhost: 3000 Cache-Kontrolle: Kein Cache

{"user": {"Name": "Sally", "Alter": "23", "Ort": "Blue York", "genre_ids": [1, 2, 3]}}

AKTUALISIEREN

Ich habe meine starken params so geändert:

%Vor%

Also macht die "if" -Anweisung am Ende den Fehler weg, aber wenn ich auf meine API poste, gibt es mir "null" zurück. Das könnte also das gleiche Problem sein wie zuvor, aber anders dargestellt. Aber gleichzeitig könnte es Fortschritt sein!

Hier ist das Protokoll für das vorherige Update

%Vor%

ABSCHLUSS UPDATE Ich habe ein paar Dinge vermisst, aber die Hauptsache war, dass ich "Content-Type - application / json" als meine Kopfzeile vermisste. Ich fühle mich so gut! Danke für all deine Hilfe, alle!

    
eightonrose 18.12.2013, 20:06
quelle

2 Antworten

3

Entsprechend Ihrer Code-Parameter in der JSON, die Sie veröffentlichen, sollte in params[:user] sein. Also sollte der JSON so aussehen:

%Vor%     
mechanicalfish 18.12.2013, 21:27
quelle
4

Rails 4 ist eine gute Wahl für den Aufbau von APIs. Ich würde mit dem rails-api Juwel gehen. Es wird viel besser als ein ausgewachsener Rails-Stack.

Ich habe viele APIs in Rails mit dem Rails API gem erstellt. Normalerweise in Kombination mit RABL (mit dem Sie schöne Vorlagen zum Rendern von JSON erstellen können). Ich bin kein großer Fan von der Integration einer API direkt in Ihre Produktion Rails App (Serving-Websites und JSON), wie Sie eine große Unordnung im Laufe der Zeit erstellen, wenn Sie beginnen, mehr Versionen zu Ihrer API hinzuzufügen. Es gibt einige sehr gute Railscasts (www.railscasts.com): Suche nach API.

Beim Zugriff auf Ihre API würden Sie einen globalen Filter in Ihrer Datei application_controller.rb verwenden. Sie könnten so etwas tun:

%Vor%

In diesem Fall würden Sie das Token in Ihrer Anfrage (das ist schnell und dreckig, verwenden Sie stattdessen die Kopfzeile) als Anfrage-Parameter senden. Sie müssen den API-Schlüssel oder das, was Sie verwenden möchten, zu Ihrem Benutzermodell hinzufügen. Erstellen Sie einfach eine Migration, indem Sie api_key hinzufügen, oder wie auch immer Sie sie zum Benutzermodell aufrufen möchten, oder erstellen Sie eine neue Tabelle mit Schlüsseln, Geheimnissen usw. und ein Feld user_id für Ihr belongs_to (und einen Benutzer has_many api_keys oder has_one). Auf diese Weise können Sie Ihren Benutzern jederzeit erlauben, ihre Schlüssel usw. zu ändern (neu zu generieren), ohne mit Nutzernamen / Passwort zu verkehren, oder ihnen sogar erlauben, mehrere API-Schlüssel mit einigen Tags zu haben (Testen, Produzieren usw.). Für Ihre Benutzeranmeldung können Sie Ihr Modell hinzufügen:

%Vor%

und erstellen Sie dann eine einfache Methode wie:

%Vor%

Ich hoffe, es hilft!

    
Nikolai Manek 05.02.2014 05:39
quelle