2014-01-06 23 views
0

validates_presence_of只有屬性我有2種型號:的Rails:如果另一個屬性指定了值

  1. - 模型數據類型
  2. 數據 - 模型數據

模型類型

  • id - 關鍵
  • name - 類型名稱

型號數據

  • id - 關鍵
  • type_id - 數據類型的ID
  • main_value - 所需的數據
  • opt_value - 可選數據(只需要指定數據類型)

我怎樣才能validates_presence_ofopt_value,如果我知道,指定type.name存在且不能更改?

這個方法我試過:

validates_presence_of :opt_value, :if => lambda { self.type_id == get_type_id } 

def get_type_id 
    Type.find_by(name: 'i_know_this_type_exists') # with and without .id 
end 

但它不工作。我認爲是因爲我沒有從Data模型到Type模型。

雖然我可以插入遷移中預定義的數據類型,並知道哪些id指定數據類型,但我不想硬編碼這個id驗證:if => lambda { self.type_id == 2 }(即使它的工作原理)內。

如何驗證此類情況?

回答

1

你可以試試這個

驗證:opt_value,:存在=>真,如果=> Proc.new {| optvalue | optvalue.is_verified? }

def is_verified? 
    self.is_verified == "Verified" 
    end 
0

我認爲特殊類型的邏輯應該是居住在Type類

class Type < ActiveRecord::Base 
    def self.special_type 
    Type.find_by(name: 'i_know_this_type_exists').id 
    end 
end 

使用PROC而不是拉姆達

class Model < ActiveRecord::Base 
    validates_presence_of :opt_value, :if => Proc.new{|f| f.type_id == Type.special_type } 
end 
0

我已經得到了來自用戶這個建議alexesDev在另一個網站上。有用。

validates_presence_of :opt_value, if: :have_opt_value? 

def have_opt_value? 
    type_id == Type.select('id').where(name: 'some type').first 
end 
相關問題