2016-03-19 5 views
0

Ich habe gerade eine neue App gestartet, in der ich eine Postleitzahl in einem Formular erfassen und in der Datenbank speichern möchte. Mein Problem ist, dass die Create-Aktion nicht aufgerufen wird, egal was ich versuche.Aktion erstellen, die nicht im Formular aufgerufen wird

Routen:

root 'postcodes#new' 
resources :postcodes, only: [:new ,:create] 

Controller: postcodes_controller.rb

class PostcodesController < ApplicationController 
    def new 
    @postcode = Postcode.new 
    end 

    def create 
    @postcode = Postcode.new(postcode_params) 
    if @postcode.save 
     flash[:success] = 'Success' 
    else 
     flash[:error] = 'Error' 
    end 
    end 

    private 

    def postcode_params 
    params.require(:postcode).permit(:code) 
    end 
end 

Modell: postcode.rb

class Postcode < ApplicationRecord 
    validates :code, presence: true, uniqueness: true 
end 

Ausblick: PLZ/new.haml

.container 
    %form 
    %fieldset.form-group 
     = form_for @postcode do |f| 
      = f.label :postcode 
      = f.text_field :code, placeholder: 'Example Postcode', class: 'form-control' 
     = f.submit 'Submit', class: 'btn btn-primary' 

Ich habe versucht, mehr Optionen in der form_for wie die Methode und Aktion und jetzt habe ich das Gefühl, es ist ein Routing-Fehler.

Jede Hilfe wird geschätzt.

Danke.

+0

* Die Create-Aktion scheint nicht aufgerufen zu werden * Wie erzählst du? Haben Sie in Ihrer Datenbank eingecheckt, dass kein Datensatz erstellt wurde? Erhalten Sie eine Fehlermeldung? Hat Ihre create-Methode eine View, weil Sie am Ende der Methode keine Umleitung definiert haben? – spickermann

+0

Entschuldigung, ich hätte klarer sein sollen. Wenn ich das Formular abschicke, wird nichts zur Datenbank hinzugefügt, und wenn ich ein "' raise "am Anfang der Erstellungsaktion platziere, passiert auch nichts. –

+0

Was sagt Ihnen das Serverprotokoll? Irgendein Fehler? – Pavan

Antwort

1

Ich glaube, dass das Problem, das Sie erleben, ein Ergebnis Ihres HAML ist.

Sie müssen ein Formular-HTML-Element außerhalb des Methodenaufrufs form_for weder verwenden noch verwenden.

Die form_for-Methode verarbeitet dieses HTML-Element/-Tag für Sie.

Sie haben:

.container 
    %form 
    %fieldset.form-group 
     = form_for @postcode do |f| 
      = f.label :postcode 
      = f.text_field :code, placeholder: 'Example Postcode', class: 'form-control' 
     = f.submit 'Submit', class: 'btn ban-primary' 

Welche ein leeres <form> Element ausgibt.

Sie sollen:

.container   
    = form_for @postcode do |f| 
    %fieldset.form-group 
    = f.label :postcode 
    = f.text_field :code, placeholder: 'Example Postcode', class: 'form-control' 
    = f.submit 'Submit', class: 'btn ban-primary' 

, dass einen ordnungsgemäßen <form>-Tag mit den erforderlichen action und method Attributen bevölkerten mit der richtigen URL generieren soll und ‚post‘, so dass Ihre create Aktion aufgerufen wird.

+0

Vielen Dank. Lustig ist, dass ich wusste, dass ich das nicht brauchte, aber nicht wusste, dass es so ein Problem verursachen könnte. –

+0

Das gleiche hier ... war ein wenig überrascht, das als Schuldiger zu sehen. –

Verwandte Themen