0

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

 validates_presence_of :username, :name

但是,当使用这样的回调创建时,只有username字段出现在表单上。namebefore_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在表单上添加字段的情况下实现相同的目标?听起来有点没有必要仅仅因为需要而将其添加为隐藏值。

任何的想法?

4

1 回答 1

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在验证之前设置了属性。

于 2012-12-04T16:37:45.800 回答