如果我有一个从Active Record查询返回的记录集合,如果我知道它的ID,如何访问其中一条记录?
答案 0 :(得分:1)
active_record_query = User.where(first_name: "Jim")
record = active_record_query.where(id: record_id).first
应该这样做。
或者,如果您在Active Record查询中已经有一堆记录,则可以提取具有已知ID的那个记录,如:
{{1}}
答案 1 :(得分:1)
有两种方法可以做到这一点。假设您有一个名为records
的ActiveRecord关系,并且正在搜索id
:
您可以使用ActiveRecord::FinderMethods#find方法,但这会导致另一次调用数据库:
records.find(id)
您可以通过调用Ruby的Enumerable#find方法在不使用数据库的情况下搜索集合,如下所示:
records.find { |r| r.id == id }
虽然它们具有相同的名称,但我们在上面的示例中调用了两种不同的find
方法。第一个将使用更多的数据库资源,而后者将使用更多的应用程序服务器资源。我不确定哪一个最快更快。
答案 2 :(得分:1)
假设我有一组用户,我想在该集合中找到ID = 3的用户:
foo = User.all
user3 = foo.find {|x| x.id == 3}
当然,如果您知道该ID,您可以找到它。假设我有一个用户表,我知道我想要的用户的ID是3:
user3 = User.find(3)
答案 3 :(得分:1)
您可以使用ActiveRecord::FinderMethods#find从数据库中找到记录。
Thing.find(1)
将在数据库中查询SELECT things.* FROM things WHERE things.id = 1
。如果无法找到记录,请提高ActiveRecord::NotFoundError
。查找也可以与ID列表一起使用。
如果您已经从数据库加载了关系,则可以使用Enumerable#find或其别名#detect
。 ActiveRecord :: Relation包括Enumerable,所以即使你没有显式地转换为.to_a
的数组,它也能工作。
将枚举中的每个条目传递给阻止。返回第一个块 不是假的。如果没有对象匹配,则调用ifnone并返回它 指定时的结果,否则返回nil。
示例:
[1,2,3,4].find(&:even?) # => 2
User.all.load.find { |u| u.id == 1 }
答案 4 :(得分:0)
是。您可以使用find方法。
# Assuming you were retrieving an ActiveRecordRelation s
s = MyRecord.where(name: "test")
s.find(id)
有关详细信息,请参阅:http://api.rubyonrails.org/v5.0/classes/ActiveRecord/FinderMethods.html#method-i-find