Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails活动记录方法以确保查询返回单个记录?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails Rails活动记录方法以确保查询返回单个记录?

Ruby on rails Rails活动记录方法以确保查询返回单个记录?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,活动记录中是否有确保查询不会返回多个记录的内容 这就是基本功能(抱歉——这不是真正的代码,但足以让您了解我在寻找什么): 本质上,这是一种保护措施,可以防止意外地(错误地)假设您的查询将始终返回单个记录 谢谢 如果我正确理解了你的问题,你可以使用 你可以做Foo.where(:thing=>“this\u should\u uniq”)。单身或Foo.where(:thing=>“this\u should\u uniq”)。单身或。限制(1) 您还可以使用ActiveRecord查找 Foo.

活动记录中是否有确保查询不会返回多个记录的内容

这就是基本功能(抱歉——这不是真正的代码,但足以让您了解我在寻找什么):

本质上,这是一种保护措施,可以防止意外地(错误地)假设您的查询将始终返回单个记录


谢谢

如果我正确理解了你的问题,你可以使用

你可以做Foo.where(:thing=>“this\u should\u uniq”)。单身或Foo.where(:thing=>“this\u should\u uniq”)。单身或。限制(1)


您还可以使用ActiveRecord查找

Foo.find_by_thing('this_should_be_uniq')
Foo.find(:first, :conditions => {:thing => 'this_should_be_uniq'})
您还可以找到具有多个属性的

Foo.find_by_attr1_and_attr2(attr1_value, attr2_value)

我在ActiveRecord::FindMethods中找不到这样的方法

作为替代解决方案,如果存在两条以上的记录,则在引发异常的情况下,可以使用
tap
方法将其写得更短:

Foo.where(:thing=>'this_should_uniq')。如果r.count>1,点击{r |引发“错误”。首先

考虑到与其他操作的隔离,以下代码是合适的:

Foo.where(:thing=>'this_should_uniq')。如果r.size>1,则点击{r}引发“错误”}[0]

您只想要一条记录还是第一条记录?
。限制(2)
,然后检查长度?但通常情况下,我会在数据库中创建唯一索引。如果您尝试这样做是因为您的应用程序的业务逻辑表明,这其中只有一个应该存在,那么您几乎肯定最好在数据库中强制执行(使用唯一索引或触发器),而不是每次都检查。最好首先防止坏数据,而不是编写代码,这样如果你得到坏数据,你的应用程序就不能再工作了。@dax只有一条记录。当有多条记录时提高。@VictorMoroz每次检查长度时,我想这样做似乎有点麻烦。下面是对其他评论的回应。我的问题略有不同。我想确保当我通过我编写的“single”方法进行选择时,查询返回单个记录。i、 e.对于某些地方,我想确保只有一条记录是匹配的(而限制只能确保我收到一条记录,无论是否有多条匹配)。啊,我明白了……你能多谈谈你想如何使用它吗?根据您正在做的事情,仅仅使用模型验证来实现唯一性不是更简单吗;OP不需要知道如何找到东西,他们需要知道如何实现唯一性。我的第一部分回答了OP的问题。find_by/find只返回一条记录。这正是OP一直在问的问题。第二部分是一些额外的信息;问题不是“我如何得到一件事”,而是“如果有不止一件事我如何提出(因为这件事应该是独一无二的)”。是的。但OP在我回答这个问题后澄清了这一点。看看这里的其他答案。
Foo.where(:thing => 'this_should_be_uniq').first
Foo.where(:thing => 'this_should_be_uniq').last
Foo.where(:thing => 'this_should_be_uniq').limit(1)
Foo.find_by_thing('this_should_be_uniq')
Foo.find(:first, :conditions => {:thing => 'this_should_be_uniq'})
Foo.find_by_attr1_and_attr2(attr1_value, attr2_value)