2016-04-13 1 views
0

J'ai l'initialiseur friendly_id pour raccourcir la valeur s'il y a une valeur en double dans la base de données.Rails Friendly_id erreur lorsque champ vide

# over writing the conflict slug 
module FriendlyId 
    module Slugged 
    def resolve_friendly_id_conflict(candidates) 
     candidates.first + friendly_id_config.sequence_separator + SecureRandom.hex(3) 
    end 
    end 
end 

Am en utilisant ce dans le modèle Société comme suit

extend FriendlyId 
friendly_id :name, use: :slugged 

Maintenant, si je laisse le name vide et tester la validation je reçois l'erreur suivante

NoMethodError at /members 

undefined method `+' for nil:NilClass 


Company#resolve_friendly_id_conflict 
config/initializers/friendly_id.rb, line 5 
+0

Qu'en est-il de la configuration d'une chaîne par défaut si le nom est vide? – margo

Répondre

1

La méthode changé était capable de gérer s'il n'y avait pas de candidats mais pas votre méthode.

Voir le code original ...

[candidates.first, SecureRandom.uuid].compact.... 

Le compact baisserait la valeur nulle.

Je vous suggère de convertir le premier candidat à une chaîne pour gérer ce cas.

candidates.first.to_s + friendly_id_config.sequence_separator + SecureRandom.hex(3) 

Encore mieux, vous pouvez coller au modèle original ... il suffit de remplacer le champ aléatoire par le vôtre.

def resolve_friendly_id_conflict(candidates) 
    [candidates.first, SecureRandom.hex(3)].compact.join(friendly_id_config.sequence_separator) 
end 
+0

Merci beaucoup @steve –