2012-09-15 45 views
0

沒有自定義的驗證工作,這是我的照片模型類代碼:爲什麼在回報率3

class Photo < ActiveRecord::Base 

    belongs_to :user 
    belongs_to :organization 

    validate :user_id_or_organization_id_cant_be_blank 

... 

    def user_id_or_organization_id_cant_be_blank 
     if !:user_id? and !:organization_id? 
     errors.add(:user_id, "no user") 
     errors.add(:organisation_id, "no organization") 
     end 
    end 

的問題是在驗證。它不起作用,我不明白爲什麼。

我可以創建一個沒有user_id或organization_id的照片,這不應該發生。

請向我解釋我做錯了什麼?

回答

1

你寧願做:

def user_id_or_organization_id_cant_be_blank 
    if user_id.blank? && organization_id.blank? 
    errors.add(:user_id, "no user") 
    errors.add(:organisation_id, "no organization") 
    end 
end 
+0

是的,我應該使用user_id而不是:user_id .. 非常感謝! –

1

Rails提供的標準的方法來檢查存在:

validates :user_id, :organization_id, presence: true 

如果你需要做一個複雜的驗證,嘗試使用::加載ActiveModel驗證器

class Photo < ActiveRecord::Base 
    validates_with UserOrganizationIdsValidator 
end 

class UserOrganizationIdsValidator < ActiveModel::Validator 
    def validate(record) 
    if user_id.blank? && organisation_id.blank? 
     errors.add(:user_id, "no user") 
     errors.add(:organisation_id, "no organization") 
    end 
    # something custom else... 
    end 
end