2012-01-16 50 views
1

我有这样的代码......的Rails 3.1 - find_or_create_by不节能

recipient = User.find_or_create_by_email(params[:recipient_email], 
     { :password => 'password', 
     :password_confirmation => 'password', 
     :first_name => 'First', 
     :last_name => 'Last', 
     :active => false }) 

不工作。收件人不会保存在数据库中,因为它应该是。然而,这...

recipient = User.find_or_create_by_email(params[:recipient_email], 
     { :password => 'password', 
     :password_confirmation => 'password', 
     :first_name => 'First', 
     :last_name => 'Last'}) 

不工作的,因为它创建收件人并在数据库中保存它,但:活动标志现在设置为默认的事实。

用户模型中我有...

attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :active 

validates :active, :presence => true 

任何想法,这是怎么回事吗?

+0

我以为我不能当它不让我upvote一些答案。显然有一些我错过了。感谢您指出了这一点。 – slabounty 2012-01-17 00:47:20

+0

啊......大复选框的东西?好的,我接受了一堆答案。感谢您提出问题@troutwine – slabounty 2012-01-17 02:36:47

+0

没问题。不过,我手边没有任何问题。您可以通过irc.freenode.net上的#ror来传递它。 。 – troutwine 2012-01-17 03:34:14

回答

1

您的:active不是真或假(除非您在迁移文件中定义了默认值,否则为零)。也许虚假被解释为不存在,我不知道。但这是我如何做到这一点:

t.boolean :active, :default => false放在您的文件中(或者如果您需要创建迁移,请执行change_column :table, :active, :boolean, :default => false),然后删除您的验证。

除非您提供具有不同值的参数,否则现在每个用户都保存为假。如果你的大多数用户应该是真的(所以整个事情,反之亦然),然后改变它。这使得你的验证不需要。

希望我明白了你的问题。否则,不理我。

+0

@pduesteler - 感谢在钟声这里是我的移民,如果我理解你说的话,我想我已经在做了...... '类AddActiveToUser <的ActiveRecord ::迁移 DEF改变 add_column:用户,:active,:boolean,:default => true end end' 我错过了什么吗? – slabounty 2012-01-17 18:48:21

+0

@pduesteler - 刚删除验证,一切正常。默认值是true,我可以传递false。不完全确定**为什么**,但现在我很高兴。谢谢!像我想的那样, – slabounty 2012-01-17 19:00:56

+0

似乎认为虚假被解释为不存在。别客气。 – pduersteler 2012-01-17 21:15:24