2010-11-27 55 views
0

在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

结束:

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 
0

个人而言,我不会对first_namelast_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 
+0

嘿瑞安。对不起,澄清我的例子比上述复杂得多。实际上,我正在寻找更接近“Paperclip”验证附件大小,附件类型等的东西,并将所有验证添加到基本属性(但我无法从读取源中找出它)。我会更新以上更清楚。 – 2010-11-27 20:41:53