Rails 3.1 - find_or_create_by不保存

时间:2012-01-16 23:56:36

标签: ruby-on-rails activerecord ruby-on-rails-3.1

我有这段代码......

    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'})

确实可以创建收件人并将其保存在数据库中,但是:active标志现在设置为默认值true。

在用户模型中,我有......

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

validates :active, :presence => true

关于这里发生了什么的任何想法?

1 个答案:

答案 0 :(得分:1)

您的:active是真还是假(或者除非您在迁移文件中定义了默认值,否则为nil)。也许虚假被解释为不存在,我真的不知道。但这就是我要这样做的方式:

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

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

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