2010-08-19 8 views
0

J'ai une table client (avec les champs id, name) et une table de projet (avec les champs id, name, client_id).ruby ​​on rails sélectionner formulaire helper Validation des valeurs nulles

Mon modèle de projet est:

class Project < ActiveRecord::Base 
    belongs_to :client 
end 

Je dois montrer dans une liste de sélection du nom du client et le nom du projet.
Dans le tout code suivant fonctionne bien, et je reçois dans la liste de sélection le nom du client concaténé avec le nom du projet (par exemple: IBM PROJECT_DEMO)

select('hour','project_id', 
     @projects.collect{ |project| 
      [project.client.name+project.name,project.id]}) 

Le problème commence quand j'ai projet sans client dans ce cas, je reçois l'erreur

undefined method `name' for nil:NilClass 

J'ai essayé d'insérer une instruction if afin de vérifier le nom du client existence comme celui-ci

select('hour','project_id', 
     @projects.collect{ |project| 
     [project.client.name if project.client+project.name,project.id]}, 
     {:prompt => 'Select Project'}) 

mais il ne fonctionne pas et je reçois une erreur

je serai plus reconnaissant si quelqu'un pouvait me donner une solution à ce problème

Merci

+0

@Codeglot: oui je suis avec vous ...! –

Répondre

1

Vous devriez avoir une validation si le nom ne peut pas être nul

validates_presence_of :name 

ou avoir une valeur par défaut donc ce n'est toujours pas

change_column :projects, :name, :string, :default => "Sam" 

mais si vous voulez juste que cela fonctionne, vous pouvez le faire

select('hour','project_id', @projects.collect{|p|["#{p.client.name if !p.client.blank?}", p.id]}) 

Il ne sera pas grave si le nom est nul parce que vous pouvez appeler nul mais vous ne pouvez pas appeler nil.attribute et pourquoi ma solution n'a pas fonctionné au premier tour.

+0

L'identifiant du client n'est pas un champ obligatoire, j'ai donc quelques projets avec le client et certains projets sans client. à cause de cela, je ne peux pas utiliser la solution validates_presence_of: name. J'ai copié et passé votre troisième solution <% = select ('hour', 'project_id', @ projects.collect {| p | ["# {p.client.name if! P.client.name.blank?}", p.id]})%> mais je reçois toujours l'erreur: méthode non définie 'nom 'pour nil: NilClass –

+0

Oh, c'est parce que l'objet nil est le client, pas le nom. J'ai mis à jour le code – s84

+0

Merci Super !! Il travaille maintenant après la correction Merci beaucoup –