2017-10-18 20 views
0

J'ai les paramètres de création suivants qui sont passés pour créer!comment retourner l'erreur exacte de créer des paramètres s'il manque

def create_params 
    params.permit(
     :param1, 
     :param2, 
     :param3, 
     :param4, 
     :param5 
    ) 
    end 

Contrôleur

def create 
    something = Model.create!(create_params) 
    end 

Toutes les colonnes de la table ne sont pas NULL. Donc, si je passe pas un des param je reçois quelque chose comme erreur ci-dessous

Mysql2::Error: Field 'col5' doesn't have a default value: INSERT INTO `table` (`col1`, `col2`, `col3`, `col4`) VALUES ('value1', 'value2, 'value3', 'value4') 

Mais son ne donnant pas le message d'erreur exact. Comment puis-je le renvoyer un message d'erreur valide? Avoir des validations au niveau de la base de données comme NOT NULL est une bonne pratique.

Répondre

1

Mais il n'est pas possible, ou fiable, d'intercepter une erreur déclenchée par la base de données. Si vous voulez de bons messages d'erreur, faites la validation au niveau d'ActiveRecord.

class Model < ActiveRecord::Base 
    validates :param1, :param2, :param3, :param4, :param5, presence: true 
end 

class ModelsController < ApplicationController 
    def create 
    model = Model.new(create_params) 

    if model.save # returns true or false 
     # ... do something 
    else 
     # ... model.errors is a collection that holds errors 
     model.errors 
    end 
    end 
end 
+0

'Model.create' essayera de créer un enregistrement dans la base de données. La meilleure façon de le faire est 'model = Model.new (create_params)'. Alors 'model.save' a du sens. –

+0

donc si j'ajoute que valide le modèle de vérification et si j'ajoute une action de mise à jour dans le contrôleur avec create et pour la mise à jour tous les params ne sont pas nécessaires alors cela fonctionnerait-il encore? –

+1

@Nicholasjames oui, c'est possible: http://guides.rubyonrails.org/active_record_validations.html#on – unkmas