ruby-on-rails - 从 ActiveRecord/Rails 查询中检索单个记录

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

我发出如下查询,可以准确检索 0 或 1 条记录:

car = Car.where(vin: '1234567890abcdefg')

返回的当然是长度为 1 的汽车列表。所以我最终在查询的末尾添加了 .first:
car = Car.where(vin: '1234567890abcdefg').first

似乎在 Rails 中应该有更好的方法。是否存在像 .onlyOne 这样的东西,它只会返回一个 Car 并在超过 1 个时抛出异常?
car = Car.where(vin: '1234567890abcdefg').onlyOne

或者
car = Car.onlyOne(vin: '1234567890abcdefg')

最佳答案

rails 4

你要find_by(vin: 123) ,您可以通过 find_by要查找的任何字段/值名称的散列。

例如。

Car.find_by(vin: '123')

如果没有找到具有该 vin 的汽车,或匹配该 vin 值的单个汽车,则将返回 nil。如果你添加一个 bang(即 find_by! ),如果没有找到带有该 vin 的汽车,它将引发异常。

如果您想在发现多个错误的情况下引发错误,那您必须自己编写。如果您永远不应该遇到不止一辆汽车具有相同 vin 的情况,那么最好的方法是对汽车模型进行唯一性验证,例如。
class Car < ActiveRecord::Base
  validates_uniqueness_of :vin # or validates :vin, unique: true
end

rails 3

你要find_by_vin (并且您可以将 vin 替换为您的任何属性的名称。

例如。
Car.find_by_vin('123')

如果没有找到具有该 vin 的汽车,或者具有该 vin 值的单个汽车,这将返回 nil。如果你添加一个 bang(即 find_by_vin! ),如果没有找到带有该 vin 的汽车,它将引发异常。

更多信息:http://guides.rubyonrails.org/active_record_querying.html#retrieving-objects-from-the-database

关于ruby-on-rails - 从 ActiveRecord/Rails 查询中检索单个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22629261/

相关文章:

html - rails : How to add custom data-attributes in collection_select

ruby-on-rails - 如何在Rails的父类(super class)中存入before_filter?

ruby-on-rails - ActiveRecord has_n 关联

ruby-on-rails - 使用 `assign_attributes` 立即保存 `has_many through:` 关联

ruby-on-rails - 将字段名称作为参数传递给自定义验证方法 Rails 4

ruby-on-rails - 如何将 has_one 关联限制为单个记录

ruby-on-rails - Rails .includes() 返回 'undefined method'

ruby-on-rails - 设计无法完成 session Controller 功能的管理模型

ruby-on-rails - 使用 Hstore 使用 Rails 查询进行排序

ruby-on-rails - Ruby、Rails - 如何检查 var 是否是电子邮件