2010-11-27 13 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]

が、これは簡単な例であることに注意してくださいとコンポーネントは、複合のための新しい検証方法に属性から私は簡単に検証を移動することはできません属性。

もう一つの例は、サイズ(attachment_size)の検証が属性 'attachment'に置かれているPaperclip gemです。何か案は?

ありがとうございました。

答えて

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'が添付ファイルのサイズ、添付ファイルの種類などを検証する方法に近いものを探しており、すべてのバリデーションを基本属性に追加します(しかし、ソースを読むことでそれを理解できませんでした)。私は上記をより明確に更新します。 –