Rails精确搜索数据库

时间:2014-01-03 18:40:58

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

我有这个找到一个数据库条目,其关键字段与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

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

2 个答案:

答案 0 :(得分:1)

Email.where返回多条记录。您实际想要使用的是Email.find_by,这将允许您传递您希望记录匹配的条件的哈希值(如Email.where如何工作),但将返回找到的第一个记录,或者为零。您的条件将需要更改

答案 1 :(得分:0)

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

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

key.update_all(confirmed: true)

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

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

if key.first
  ...

仅更新此一条记录:

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

或:

key.update_attribute(:confirmed, true)