2012-11-10 29 views
1

我有一個Project模型,我需要測試billing_address_type是否有效。如何檢查值是否包含在ActiveRecord驗證中的散列中?

class Project < ActiveRecord::Base 

    validates :billing_address_type, :inclusion => { :in => %w(h o) } 

    def billing_address_types 
    options = {"Home" => "h", "Organisation" => "o"}  
    if person.present? 
     options.delete("Home") if person.address.blank? 
     options.delete("Organisation") if person.organisation.blank? 
    end 
    options 
    end 

但是,validates行是錯誤的。我需要檢查包含由方法billing_address_types返回的散列值。

我該如何檢查散列值?

感謝您的幫助......

+0

你需要has_value?方法,如果我理解你寫 –

回答

1

您可以通過lambda或新Proc:in選項,將動態評估,並使用從billing_address_types返回的哈希values方法只獲取哈希值:

validates :billing_address_type, :inclusion => { :in => lambda { |a| a.class.billing_address_types.values } } 

查看documentation瞭解詳情。

+0

非常感謝,正是我一直在尋找!很有幫助... – Tintin81

相關問題