2010-09-13 84 views
17

我想爲用戶註冊添加invite_code要求。 IE瀏覽器。除了要求他們指定電子郵件/密碼組合外,我還需要一個附加字段:invite_code。這是一個臨時修復,以便非特定用戶無法在給定的阿爾法時間段內登錄。Ruby on Rails:設計,想添加邀請碼?

我很困惑,因爲設計不添加控制器。我對虛擬屬性的概念很熟悉,它讓我覺得我可以在模型中添加一個:invite_code,然後現在只需要編寫一個步驟,在其中說明邀請代碼必須等於12345或現在的任何內容。

是否與色器件驗證這個有意義嗎?我該如何從適當的鐵軌安撫方法中解決這個問題?

非常感謝。

+0

我已經加入: 高清invite_code @invite_code 結束......這使得invite_code作爲虛擬屬性可訪問,但我應該在哪裏做invite_code的邏輯必須等於「12345」? – Dave 2010-09-13 22:22:07

回答

24

1)一種虛擬屬性通常需要除了吸氣劑的裝定。

最簡單方法是

attr_accessor :invite_code 
attr_accessible :invite_code # allow invite_code to be set via mass-assignment 
    # See comment by James, below. 

添加到用戶模型

2)我猜想設計想要的用戶模型來驗證。所以,你可以通過添加

validates_each :invite_code, :on => :create do |record, attr, value| 
    record.errors.add attr, "Please enter correct invite code" unless 
     value && value == "12345" 
end 

注停止驗證:補充:關於=>:創建自invite_code只需要創建新的用戶,而不是更新。

+0

這是最好的方式,因爲您控制驗證消息。 – 2010-09-14 01:24:43

+0

非常感謝。 – Dave 2010-09-14 20:18:59

+0

它幫了我很多 – useranon 2011-03-11 13:14:12

10

試試這個:http://github.com/scambra/devise_invitable

It adds support todevise發送電子郵件邀請函(它需要進行身份驗證),並接受邀請設置密碼。

它與Devise> = 4.0一起使用如果你想使用devise 3.0.x,你必須使用1.2.1或更低如果你想使用devise 3.1.x,你必須使用1.3.2或更低如果你想要要使用devise> = 3.2,您必須使用1.6.1或更低版本...

+1

感謝您的鏈接,但我認爲這略有不同 - 它允許用戶邀請其他用戶 - 現在我只想鎖定新用戶的註冊,除非他們有我發出的邀請代碼。 – Dave 2010-09-14 20:19:44

0

根據文檔,可邀請可讓您控制誰邀請其他人。如果invitation_limit的設置爲「0」,則人們無法分發邀請。

從文檔:

invitation_limit:用戶可以發送邀請函的數量。零的 默認值意味着用戶可以發送他們 希望儘可能多的邀請,沒有爲任何用戶沒有限制,invitation_limit列不使用 。設置爲0意味着他們無法發送邀請。設置n> 0表示他們可以發送n個邀請。您可以爲一些用戶與全球invitation_limit改變invitation_limit 列,以便他們能夠發送更多或更少的邀請,甚至 = 0