【问题标题】:Rails 3.1 - find_or_create_by Not SavingRails 3.1 - find_or_create_by 不保存
【发布时间】:2012-01-16 23:56:36
【问题描述】:

我有这个代码...

    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

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

【问题讨论】:

  • 当它不允许我对一些答案进行投票时,我认为我不能。显然我缺少一些东西。感谢您指出这一点。
  • 啊……大复选框的东西?好的,我已经接受了一堆答案。感谢您指出问题@troutwine
  • 没问题。不过,我对手头的问题没有任何意见。您可能会通过 irc.freenode.net 上 #ror 中的人传递它。

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


【解决方案1】:

您的 :active 为真或假(或 nil,除非您在迁移文件中定义了默认值)。也许 false 被解释为不存在,我真的不知道。但我会这样做:

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

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

希望我明白了你的问题。否则,请忽略我。

【讨论】:

  • @pduesteler - 感谢您的加入。这是我的迁移,如果我明白你在说什么,我想我已经在这样做了......class AddActiveToUser < ActiveRecord::Migration def change add_column :users, :active, :boolean, :default => true end end我错过了什么吗?跨度>
  • @pduesteler - 刚刚删除了验证,一切正常。默认为真,我可以传假。不完全确定为什么,但现在我很高兴。谢谢!
  • 就像我想的那样,似乎 false 被解释为不存在。不客气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多