2016-06-28 138 views
1

是我第一次構建自定義驗證,因爲嘗試常規ORM驗證無效。我有一個名爲AdGroup的模型,屬於另一個名爲Car的模型。如果用戶沒有選擇汽車,我想發送阻止用戶創建新的廣告組。另外汽車是一個文件。如何驗證關聯的模型?

class AdGroup < ActiveRecord::Base 
    belongs_to :car 
    validate :validate_car_id 

    def validate_car_id 
    car = Car.find_by(id: params[:id]) 
    if car.nil? 
     errors.add(:car, "Select a car image") 
    end 
    end 
end 

class Car < ActiveRecord::Base 
    validates :make, :model, :year, presence: true     
    validates :file, presence: true 
    belongs_to :make 
    has_many :ad_groups 

    ... 
end 

是我試圖選擇的圖像。

+0

您應該將您的模型定義添加到問題中。 –

+0

這是完整的定義嗎?你應該在這裏添加'AdGroup'和'Car'模型,包括定義它們相互關聯的行(比如'has_many'或'belongs_to')。 –

+0

如果答案對您有用,您應該接受或投票支持。 –

回答

1

您的廣告組模型需要與汽車模型關聯。廣告組模型應該有belongs_to :car行,而車型需要has_many :ad_groups

要驗證相關模型,您可以使用ActiveRecord的validates_associated。請務必閱讀有關陷阱的鏈接文檔。

class AdGroup < ActiveRecord::Base 
    belongs_to :car 

    validates :car, presence: true 
    validates_associated :car 
end 

當使用validates_associated你不必做自定義驗證。

+0

with validates_associated你不需要定製驗證了嗎? –

+0

沒錯,我已經更新了我的答案。 –