2016-10-13 19 views
0

Ich benutze PostgreSQL. Ich habe das nächste Formular auf /main URL (localhost: 3000/main):Warum kann Rails der Datenbank keinen neuen Datensatz hinzufügen?

=form_for(@car) do |b| 
    .col-xs-2= b.text_field(:type, class: "form-control", placeholder: "Type") 
    = b.submit('Buy', class: "btn btn-default") 

In meinem Controller:

def main 
    @car = Car.new 
end 

def new 
    @car = Car.new 
end 

def create 
@car = Car.new(car_params) 

respond_to do |format| 
    if @car.save 
    format.html { redirect_to @car, notice: 'Car was successfully ordered.' } 
    format.json { render :show, status: :created, location: @car } 
    else 
    format.html { render :new } 
    format.json { render json: @car, status: :unprocessable_entity } 
    end 
end 

Ende

wo

def car_params 
    params.require(:car).permit(:type) 
end 

Ich habe meine Code 100 mal und es scheint alles in Ordnung, aber ich kann keinen neuen Datensatz zu meiner Datenbanktabelle hinzufügen. Kann mir jemand helfen, warum es passiert? Was ist das Problem in meinem Code?

+1

Hier gehen wir wieder. Ändern Sie Ihre Frage nicht 20 Mal. Sie machen Antworten ungültig. Veröffentlichen Sie Ihren tatsächlichen Code von Anfang an in der ersten Revision. –

+0

@SergioTulentsev Sie haben Recht! Das tut mir leid! So sieht mein Code jetzt aus! – Doe

+0

Können Sie überprüfen, ob im Modell irgendwelche Validierungen angewendet werden? Sie können die @ car.errors in Else-Block drucken, um es zu überprüfen –

Antwort

0

Sie haben vergessen, das Auto zu speichern. Obwohl Sie das Objekt deklarieren und festlegen, haben Sie vergessen, es in der Datenbank zu speichern.

Sie sollten es tun, um die folgende Zeile durch Zusatz:

@car.save 

in Ihrer Methode erstellen fehlt

+0

ah nein, sorry. Es ist mein Fehler, den Code innerhalb der Frage zu füllen. Also ich habe die Methode save in meinem Code. Ich aktualisierte meine Frage – Doe

0

ein paar Dinge Aktion erstellen. Müssen ".new" hinzufügen, wo die Auto-Variable gesetzt wird, und dann auch ".save", wo die if-Anweisung ist, glaube ich, dass es das tun sollte.

Create-Methode sollte wie unter

def create 
    @car = Car.new(car_params) 

respond_to do |format| 
    if @car.save 
    format.html { redirect_to @car, notice: 'Car was successfully ordered.' } 
    format.json { render :show, status: :created, location: @car } 
else 
    format.html { render :new } 
    format.json { render json: @car, status: :unprocessable_entity } 
    end 
end 
+0

ah nein, sorry. Es ist mein Fehler, den Code innerhalb der Frage zu füllen. Also habe ich eine neue Methode in meinem Code. Ich aktualisierte meine Frage – Doe

0

@car = Car(car_params) nicht korrekt ist. Sie müssen tun @car = Car.new(car_params)

+0

ah nein, sorry. Es ist mein Fehler, den Code innerhalb der Frage zu füllen. Also habe ich eine neue Methode in meinem Code. Ich habe meine Frage aktualisiert. Das tut mir leid! – Doe

0

Das erste, was Sie tun müssen, ist diese Zeile in Ihrer create-Methode zu ersetzen.

@car = Car(car_params) 

mit dieser Linie

@car = Car.new(car_params) 

Weil wir den Rekord des Autos mit dem params erlaubt initialisieren müssen. Danach müssen Sie @car.save aufrufen, was einen booleschen Wert zurückgibt.

So können Sie es überprüfen, wenn Bedingung wie

if @car.save 

Hoffnung das Ihr Problem löst.

+0

ah nein, sorry. Es ist mein Fehler, den Code innerhalb der Frage zu füllen. Also habe ich eine neue Methode in meinem Code. Ich habe meine Frage aktualisiert. Das tut mir leid! – Doe

+0

Können Sie das überprüfen, wenn im Modell irgendwelche Validierungen angewendet werden? –

+0

Sie können die @ car.errors im Else-Block ausdrucken, um dies zu überprüfen. –

Verwandte Themen