2017-04-24 2 views
0

J'ai une forme ici https://pastebin.com/JfXr054ychamps de formulaire ne sont pas enregistrées dans la base de données - rubis sur des rails

En routes.rb je

resources :landslides, only: [:new, :create, :index] 

En landslides_controller.rb je

def new 
    @landslide = Landslide.new(landslide_params) 

    @landslide.save 
    render plain: @landslide.inspect 
    end 

et

def landslide_params 
    params.require(:landslide).permit(:total_id, :year_id, :start_date, :end_date, :day_number, :continent, :country, :location, :type, :admin_level, :new_lat, :new_long, :mapped, :spatial_area, :fatalities, :injuries, :notes, :sources) 
end 

Pourquoi le formulaire n'est pas enregistré dans la table?

+0

Vérifiez la valeur de retour de sauver, c'est peut-être à cause des validations de votre modèle. – yoones

Répondre

1

new est la méthode incorrecte dans laquelle effectuer #save. cela doit être fait dans create

def new 
    @landslide = Landslide.new 
    end 

    def create 
    @landslide = Landslide.new(landslide_params) 
    if @landslide.save 
     render plain: @landslide.inspect 
    else 
     render :new 
    end 
    end 

En outre, votre formulaire semble erroné. L'emplacement des données de formulaire dans votre retour params dépend du champ de contrôle name, pas sur le id

Au lieu de

%input#location.form-control{:type => "Location"} 

J'espère voir

%input#landslide_location.form-control{:type => "text", :name => "landslide[location]"} 
+0

J'ai changé pour le vôtre et ça ne marche toujours pas. Quelque chose ne va pas avec la forme que je pense. –

+0

Voici mon bouton d'envoi '% button.btn.btn-default {" données-rejeter "=>" modal ",: type =>" soumettre "} Submit'. Aussi ai-je besoin d'un attribut spécifique pour chaque champ? –

+0

Oui, vous avez raison, votre formulaire n'est pas standard. Voir ma modification. – SteveTurczyn