在创建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,如果找到多条记录,是否会引发异常?
答案 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