2017-02-15 70 views
0

我有一個form_for用於創建新記錄。我設置了getter和setter方法來訪問我的視圖中的表單字段。下面是我的getter ANS setter方法與我的表單視圖,分別getter沒有獲得驗證軌上新記錄的值4

消氣& setter方法:

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 

表單視圖:

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

我的問題是,我的輸入字段是自動完成與多個設置爲true,以獲得多個值。當用戶輸入多個逗號分隔值並提交表單時,如果表單中有任何錯誤,我的新行爲將被呈現,並且用戶會丟失所有輸入的值,從而迫使他重新輸入所有值。我怎麼解決這個問題?

回答

0

最好是製作一個manufacturer_model_name_form字段或通過attr_accessor這樣的字段,然後解析validate。這將是這個樣子:

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 

然後,在你的表格,你可以使用manufacturer_model_name_form,而不是manufacturer_model_name

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