如何在Rails的“where”语句中只返回一个对象?

时间:2014-10-14 08:32:30

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

在创建Rails应用程序时,我遇到了一个常见问题,即在数据库中找到符合某些条件的唯一对象。如果有多个结果,则需要触发某种错误。 我现在这样做:

results = ModelName.where(attr1: condition1, attr2: condition2)
raise "too many ModelName objects for condition" if results.count > 1
unique_result = results.first

但对于这样一个共同的任务来说,这似乎太冗长了。只需写下这样的东西就好了:

unique_result = ModelName.unique_where(attr1: condition1, attr2: condition2)

如果记录是唯一的,是否存在返回记录的方法;如果没有手动扩展ActiveRecord,如果找到多条记录,是否会引发异常?

1 个答案:

答案 0 :(得分:1)

似乎没有这样的内置方法,所以我为此创建了一个ActiveRecord :: Relation扩展:

module ActiveRecordRelationExtension
  extend ActiveSupport::Concern

  def single_object!
    if self.many?
      raise "More than one instance of #{self.klass.name} returned"
    end
    return self.first
  end
end