Ruby on rails 多列属性轨道

Ruby on rails 多列属性轨道,ruby-on-rails,Ruby On Rails,给定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]=@

给定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\u name]+@model.errors[:last\u name]

请注意,这是一个简化的示例,我无法轻松地将验证从组件属性移动到复合属性的新验证方法中

另一个例子是回形针gem,其中大小(附件大小)的验证放在属性“附件”上。有什么想法吗


谢谢。

就我个人而言,我不会对
名字和
姓氏字段进行任何“正常”验证。相反,我会把它交给一个有能力的定制验证器:

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
结果是:

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

嘿,瑞安。对不起,澄清一下我的例子比上面的要复杂得多。实际上,我正在寻找一种更接近于
曲别针
如何验证附件大小、附件类型等并将所有验证添加到base属性的方法(但我无法从阅读源代码中找到它)。我将更新以上内容以使其更清楚。