表单中不存在的validates_presence_of属性

时间:2012-12-04 16:33:54

标签: ruby-on-rails

在我的User.rb模型中,我验证了usernamename的存在

 validates_presence_of :username, :name

但是,只有username字段存在于表单上,而name是使用before_validation回调创建的。

  def set_username_as_name_if_empty
    if self.username && self.username.present?
      self.name = self.username if self.name && self.name.empty?
    end
  end

只要表单上存在name字段(输入或隐藏无关紧要),此工作就可以了。

我的问题是如何在不必在表单上添加name字段的情况下实现相同的目标?听起来有点不必要将它添加为隐藏值只是因为需要。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

简化验证方法的方法:

def set_username_as_name_if_empty
  if name.blank?
    name = username if username.present?
  end
end

因为执行以下操作不会引发任何错误:

1.9.3p0 :038 > nil.present?
 => false

我完全不明白你的问题,但如果你的意思是

  

“我被迫在表单中输入(甚至隐藏)以避免输入   验证失败了?“

我会说不,您不需要此输入,因为您在验证之前设置了name属性。