【问题标题】:Rails Precision searching the databaseRails Precision 搜索数据库
【发布时间】:2014-01-03 18:40:57
【问题描述】:

我有这个找到一个与 ID 参数相同的关键字段的数据库条目。现在,我明白了:

undefined method `confirmed=' for<ActiveRecord::Relation::ActiveRecord_Relation_Email:0x007fd5254c33d8>

还有代码:

    key = Email.where(:key => params[:id])
    if key[1] = nil
      @error = true
    else
        key.confirmed = true
      @error = false
    end

如果它不在数据库或电子邮件对象中,我希望得到一个 nil。我还认为它可以返回电子邮件对象的哈希值。应该有 0 或 1 个 DB 条目。我应该如何正确地做到这一点?我不知道 ActiveRecord::Relation 是什么。

【问题讨论】:

  • 我想你的支票应该是if key[1] == nil?

标签: ruby-on-rails database ruby-on-rails-4 rails-activerecord


【解决方案1】:

Email.where 返回多条记录。您真正想要使用的是Email.find_by,它将允许您传递您希望记录匹配的条件的散列(例如Email.where 的工作方式),但将返回找到的第一条记录或nil。因此,您的条件将需要更改

【讨论】:

    【解决方案2】:

    你似乎完全理解错了。请熟悉ActiveRecord documentation

    ActiveRecord::Relation 表示查询结果。是的,您可以通过它更新记录,但是这样:

    key.update_all(confirmed: true)
    

    这将更新查询找到的所有记录的确认属性。

    如果要检查是否至少返回了一条记录,请使用:

    if key.first
      ...
    

    仅更新这一条记录:

    key.first.confirmed = true
    key.first.save
    

    或:

    key.update_attribute(:confirmed, true)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      相关资源
      最近更新 更多