2014-04-10 18 views
6

Ich habe Probleme beim Erstellen eines Formulars für meine ActiveResource-Modelle, aber ich kann keine Lösung finden. Das Problem ist, dass das Modell nicht die Felder nicht kennt, und wirft einen Fehler, wenn ich versuche, ein Textfeld zu erstellen:Verschachtelte Formulare scheitern bei Verwendung eines ActiveResource-Modells, Rails 4

undefined method `firstname' for #<User:0x00000002946ec8> 

Für diese Form:

<%= form_for(@user) do |f| %> 
<div class="field"> 
    <%= f.label :firstname %><br> 
    <%= f.text_field :firstname %> 
</div> 

Das ist mein von meinem Controller:

def new 
    @user = User.new 
end 

Thie ist mein Benutzermodell:

class User < ActiveResource::Base 
    self.site = "https://***.com/api/v1.0/" 
end 

Ich habe Folgendes versucht, aber das funktioniert nicht gut mit ActiveResource-Modellen, es ist irgendwie nicht in der Lage, abgerufene Daten zu speichern. user.firstname ist leer, wenn ich die Zeile entfernen Sie es nicht ist ...

attr_accessor :firstname, :lastname 

Dann fand ich den Edelstein Fortify (https://rubygems.org/gems/fortify), aber das letzte Update war im Jahr 2010 und der Installation nicht funktioniert ...

Ich hoffe, jemand ist mit diesem Problem vertraut und kann mir in die richtige Richtung helfen.

+0

Haben Sie diesen Thread gesehen: https://stackoverflow.com/questions/2034700/form-for-with-nested-resources Überprüfen Sie die App Routen. –

+0

Können Sie Ihr Benutzermodell auflisten? –

+0

@maximus, ich habe meinen Beitrag bearbeitet und das Benutzermodell hinzugefügt. Bei BaraaAl-Bourghi glaube ich nicht, dass es verwandt ist. – Chris

Antwort

8

Sie sollten verwenden .build [1] in Ihrem Controller statt .new [2], wie:

@user = User.build 

Der Grund dafür ist, dass .new ohne params nur ein leeres Objekt erzeugt, während .build erste Abfragen der api für das, was params sollte es verwenden, die speziell für diese usecase (see this thread for more details)

Docs:

  1. http://api.rubyonrails.org/v3.2.13/classes/ActiveResource/Base.html#method-c-build

  2. http://api.rubyonrails.org/v3.2.13/classes/ActiveResource/Base.html#method-c-new

+0

Vielen Dank für Ihre Antwort. Es löst jedoch einen 500-Server-Fehler von der Remote-API aus. Weißt du, welche Art von Antwort es erwartet oder welche Art von Anfrage es macht? Sollte ich die API auf eine Art vorbereiten? – Chris

+0

Es ruft "https: // ***. Com/api/v1.0/users/new.json" an und erwartet eine gültige JSON-Antwort mit den Attributen eines neuen Benutzers (von dem es ausgefüllt wird) ActiveResource erwartet, dass die API RESTful ist, aber wenn Ihre API eine 500 wirft, dann ist es vielleicht nicht - Sie sollten untersuchen, was den 500 Fehler am anderen Ende verursacht hat, und sich in REST informieren, wenn Sie nicht sicher sind darüber ([diese Antwort] (http://stackoverflow.com/questions/2217758/what-is-a-rest-api) ist ein guter Anfang. – omnikron

+0

Danke, ich habe eine Antwort auf Json in neu hinzugefügt und es hat funktioniert. :) – Chris

Verwandte Themen