首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getter未在验证rails 4上获取新记录的值

getter未在验证rails 4上获取新记录的值
EN

Stack Overflow用户
提问于 2017-02-15 21:46:51
回答 1查看 50关注 0票数 0

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

分别使用Getter和Setter方法:

代码语言:javascript
复制
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

表单视图:

代码语言:javascript
复制
= f.text_field :manufacturer_model_name, :class => 'form-control 

我的问题是,我的输入域是自动完成的,并将multiple设置为true,以获得多个值。当用户输入多个逗号分隔的值并提交表单时,如果表单上有任何错误,我的新操作将被呈现,并且用户将丢失所有输入的值,迫使他重新输入所有值。我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2017-02-15 21:54:03

最好是通过attr_accessor创建一个manufacturer_model_name_form字段或类似的字段,然后用validate解析它。它看起来像这样:

代码语言:javascript
复制
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

代码语言:javascript
复制
= f.text_field :manufacturer_model_name_form, :class => 'form-control'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42251152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档