【发布时间】:2013-09-30 15:15:58
【问题描述】:
Active Record 中有什么东西可以确保您的查询不会返回多条记录吗?
这就是基本功能(抱歉——这不是真正的代码,但足以说明我在寻找什么):
Foo.where(:thing => 'this_should_be_uniq').single
def single(records)
if records.length > 1
raise # or maybe return nil or something like that
else
return records.first
end
end
本质上,这可以防止意外假设(错误地)您的查询将始终返回一条记录。
谢谢!
【问题讨论】:
-
您只想要一条记录还是特别想要第一条记录?
-
.limit(2)然后检查长度?但通常我会在数据库中创建唯一索引。 -
如果您尝试这样做是因为您的应用程序的业务逻辑表明只有一个这样的东西应该存在,那么您几乎肯定最好在数据库中执行它(使用唯一索引,或触发器)而不是每次都检查。最好从一开始就防止坏数据,而不是编写代码,这样如果你得到坏数据,你的应用就不能再工作了。
-
@dax 只有一条记录。当有多个记录时引发。
-
@VictorMoroz 每次我想检查长度似乎有点麻烦。有关其他评论的回复,请参见下文。
标签: ruby-on-rails ruby activerecord