getter没有获得验证轨道上新记录的值4

时间:2017-02-15 13:46:51

标签: ruby-on-rails getter-setter

我有一个用于创建新记录的form_for。我在我的视图中设置了getter和setter方法来访问表单字段。下面是我的表格视图中的getter和setter方法,

Getter& 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,以获取多个值。当用户输入多个逗号分隔值并提交表单时,如果表单上有任何错误,我的新操作将被呈现,用户将丢失所有输入的值,迫使他再次重新输入。我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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'