我有一个用于创建新记录的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 我的问题是,我的输入域是自动完成的,并将multiple设置为true,以获得多个值。当用户输入多个逗号分隔的值并提交表单时,如果表单上有任何错误,我的新操作将被呈现,并且用户将丢失所有输入的值,迫使他重新输入所有值。我该如何解决这个问题?
发布于 2017-02-15 21:54:03
最好是通过attr_accessor创建一个manufacturer_model_name_form字段或类似的字段,然后用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 # 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'https://stackoverflow.com/questions/42251152
复制相似问题