2017-02-15 1 views
0

J'ai un formulaire_ pour créer un nouvel enregistrement. J'ai défini des méthodes getter et setter pour accéder au champ de formulaire dans ma vue. Voici mes méthodes setter getter ANS avec mon point de vue de la forme,getter n'obtenant pas de valeurs pour le nouvel enregistrement sur les rails de validation 4

Getter & Setter Méthodes respectivement:

def manufacturer_model_name 
    self.manufacturer_models.pluck(:name).join(', ') unless self.manufacturer_models.blank?  
end 

def manufacturer_model_name=(names) 
    names = names.split(',').map{|n| n.strip}.delete_if(&:empty?) if names.present? 
    names.uniq.each do |name| 
    id = ManufacturerModel.where(:name => name, :manufacturer_id => manufacturer.id).first_or_create.id   
    if self.new_record? 
     self.user_skill_manufacturer_models.build(:user_skill_id => self.id, :manufacturer_model_id => id) 
    else 
     self.user_skill_manufacturer_models.where(:user_skill_id => self.id, :manufacturer_model_id => id).first_or_create.id 
    end 
    end if names.present? 
end 

Form Voir:

= f.text_field :manufacturer_model_name, :class => 'form-control 

Mon problème est que, mon champ d'entrée est saisie semi-automatique avec multiple défini sur true, pour obtenir plusieurs valeurs. lorsque l'utilisateur entre plusieurs valeurs séparées par des virgules et soumet le formulaire et s'il y a des erreurs sur le formulaire, ma nouvelle action est restituée et l'utilisateur perd toutes les valeurs saisies, le forçant à tout ré-entrer. Comment puis-je résoudre ce problème?

Répondre

0

Il serait préférable de créer un champ manufacturer_model_name_form ou un tel via attr_accessor, puis d'analyser cela en validate. Il ressemblerait à quelque chose comme ceci:

class ManufacturerModel < ActiveRecord::Base 
    attr_accessor :manufacturer_model_name_form 

    validate :validate_manufacturer_model_name 

    def validate_manufacturer_model_name 
    errors.add(:manufacturer_model_name, 'not a valid manufacturer model name') if !!true # perform your validation here in place of `!!true` 
    end 
end 

Ensuite, dans votre formulaire, vous utiliseriez manufacturer_model_name_form au lieu de manufacturer_model_name:

= f.text_field :manufacturer_model_name_form, :class => 'form-control'