2016-12-24 55 views
2

我正在做一個非常簡單的推介系統,但我看到的問題是我需要使用單個提交操作對數據庫進行兩個不同的調用,而且我不知道如何去做。簡單的推介系統在軌道上

該系統的總體思路是:

  • 訪問者訂閱郵件列表和接收帶有某種查詢字符串參數的識別他們的推薦鏈接的電子郵件(如www.domain。 ?COM referrer_id = 1)
  • 當另一個訪問者使用該推介鏈接和簽約,我存儲)新用戶的電子郵件地址,以及b)轉診信息

這將被存儲在兩個表:

  • subscribers| id | email | referrer |
  • referrals| id | subscriber_id | referrals |,這裏推薦的是次數的用戶已經提到其他用戶

同樣,我不知道如何使兩個呼叫 - 一個對於新用戶和一個轉介信息 - 只需一次提交操作。或者,如果這不是最好的方法,那麼應該如何使用最佳實踐來做到這一點。

+2

我不太明白WH你是否嘗試提交?爲什麼這兩種行爲都應該在一個操作中完成? –

+1

@DmitryTonkonogov老實說,我是開發新手,這是我知道如何去做的唯一方法。這些行爲如何分開進行? –

回答

3

對於您的情況,您只需要爲你的用戶提供單一的表(用戶):

|id |email  |... |referred_by | 
|5 |[email protected] |... |1   | 
|6 |[email protected] |... |5   | 
|7 |[email protected] |... |5   | 
|8 |[email protected] |... |6   | 

,你將發送到user5,與他的朋友分享的鏈接將是:

www.domain.com/users/sign-up?referred_by=5 

然後,當有人打開此鏈接時,使用單個數據庫查詢的單選動作將創建一個新值,其值爲referred_by,值等於5(引用鏈接的ID):

User.create!(email: '[email protected]',... ,referred_by: 5) 

您可以修改用戶(用戶)模式是這樣的:

class User < ActiveRecord::Base 
.... 

    belongs_to :referrer, :class_name => 'User', foreign_key: 'referred_by' 

    def number_of_referred_users 
    where(referred_by: id).count 
    end 
.... 
end 

然後在任何時候你想獲得一個特定的用戶提及到您的網站的用戶數量:

user.number_of_referred_users 

而且,如果你想獲得某個用戶的指引,你可以說:

user.referrer 
+1

謝謝!我實現了這個 - 超簡單和容易。兩個簡單的問題: - number_of_referred_users是否需要參數(即'id')? - 我將如何訪問並運行該方法? –

+1

@SpencerK。不客氣。對於number_of_referred_users方法,它是一個實例方法而不是一個類方法,所以你可以在你擁有的用戶上調用它。例如'u = User.first; u.number_of_referred_users'。我想你必須閱讀關於類方法VS實例方法http://www.railstips。組織/博客/存檔/ 2009/05/11 /類和實例的方法 - 在 - 紅寶石/ – Hummusawy