2014-10-17 90 views
0

我有一種情況,用戶可以請求邀請,但前提是系統中沒有請求。如果他們請求邀請,則invitation.sender_id設置爲"0",並且如果他們收到來自用戶的邀請,則invitation.sender_id設置爲current_user.id,其始終爲>0回調在Rails 3.2中沒有像預期的那樣工作

invitation.rb模型before_create :recipient_has_requested和回調:

def recipient_has_requested 
    if Invitation.exists?(recipient_email: :recipient_email, sender_id: 0) 
    errors.add :recipient_email, 'An invitation has already been sent to that email address.' 
    end 
end 

當我檢查日誌中的SQL,我看到:

Invitation Exists (0.0ms) SELECT 1 AS one FROM "invitations" WHERE "invitations"."recipient_email" = 'recipient_email' AND "invitations"."sender_id" = 0 LIMIT 1 

我的理解應該返回'true'回調,防止新的邀請被保存。但是,查看數據庫顯示我有多個邀請請求,全部來自同一個電子郵件地址,並且全部使用invitation.sender_id = 0

我是新來的,所以任何幫助將不勝感激。回調爲什麼會返回意想不到的結果?

==編輯==

我認爲這裏的邏輯是相反的。回調是找到符合條件的記錄,因此返回true

任何人都可以看看邏輯並告訴我如何寫它,所以它返回false

回答

0

好吧,在google-fu多了一些之後,我在SOF中遇到了一些類似的案例。

基本上,我的邏輯都錯了。它被構建爲回調,但邏輯是真實的。我將其更改爲使用範圍進行驗證,並且工作正常。

下面是最終snipit:

validates :recipient_email, uniqueness: { scope: :sender_id } 
相關問題