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