在Rails 3.0.3模型中给定复合虚拟属性如何将组件属性上的错误自动放置在复合属性上?例如:
validates_presence_of :first_name
validates_presence_of :last_name
def name
"#{first_name} #{last_name}"
end
def name=(name)
first_name, last_name = name.split
end
给出:
@model.errors[:name] = @model.errors[:first_name] + @model.errors[:last_name]
请注意,这是一个简化的示例,我无法轻松地将组件属性中的验证移动到复合属性的新验证方法中。
另一个例子是Paperclip gem,其中大小(attachment_size)的验证放在属性'attachment'上。有什么想法吗?
感谢。
答案 0 :(得分:0)
就个人而言,我在first_name
和last_name
字段上没有任何“正常”验证。相反,我会将它留在自定义验证器的有能力的手中:
validate :name_is_valid
def name_is_valid
if first_name.blank? || last_name.blank?
errors.add(:name, "You must specify both your first and last name")
end
end
答案 1 :(得分:0)
结束于:
after_validation do
self.errors[:first_name].each do |message|
self.errors.add(:name, message)
end
self.errors[:last_name].each do |message|
self.errors.add(:name, message)
end
self.errors.delete(:first_name)
self.errors.delete(:last_name)
end