2015-08-25 75 views
1

屬性驗證消息在我的Rails應用4我查了唯一約束,像這樣:定義跨模型

validates :recipient, uniqueness: { 
    scope: :user, 
    message: 'You already have a Connection with this user' 
} 

現在雖然它涉及recipient我想顯示在recipient.email場的錯誤消息。

是使用validates語法來執行此操作的一種方法。

更新:這是在某種消息線程上,一個用戶只能與另一個用戶擁有一個。因此驗證。

+0

如果您的上述代碼段來自哪個模型? – onebree

+0

它是某種MessageThread,用戶只能與其他用戶共享一個MessageThread。我確實更新了我的答案。 – Besi

+0

電子郵件是MessageThread的一個屬性嗎?電子郵件參數如何作爲表單的一部分進行處理? – Swards

回答

0

不是一個乾淨的解決方案,但我相信它的工作。但我不確定。

after_validation do 
msg = 'You already have a Connection with this user' 
    if errors.messages[:recipient] && errors.messages[:recipient].include? msg 
    errors.messages[:recipient].reject!{ |i| i == msg } 
    errors.messages[:recipient][:email] = msg 
end 
end 
0

通常我的解決方案我已經有工作正常,它會顯示確認的消息,但是我沒有爲recipient明顯的領域,但一個子表單包含recipient數據。

所以像亞瑟指出,我可能必須做一個自定義驗證器。而我現在的工作:

validate :unique_recipient 

def unique_recipient 
    if user.threads.map(&:recipient).map(&:email).include?(recipient.email) 
    recipient.errors.add(:email, "You already have a connection with #{recipient.first_name}") 
    end 
end 

現在的檢查是有點哈克,我喜歡我原來的解決方案的簡單,而且這種方法的好處是,我還可以在確認顯示用戶first_name信息。