2010-09-13 44 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