在类数组中查找类对象时很麻烦

| 我正在使用Ruby on Rails 3.0.7,并且我想了解如何处理以下代码以便检索具有指定“ 0”的类对象。 在我的查看文件中,我有:
@records = Users.all # This returns an array (class)
在另一个文件(部分模板)中,我想检索例如
id
1的用户,但是如果这样做:
@records.find(1)
我得到所有记录的
enumerator
(类):
<Enumerator: [<Users id: 1, ... ] >
如何找到带有“0ѭ1”(或其他ID)“ aààlàRuby on Rails Way”的用户? 更新 我在视图文件中使用
@records = Users.all
,因为我的目的是尽量减少对数据库的调用,因为我需要遍历几乎所有记录并检查它们的存在。例如,如果我这样做:
some_hash.each { |key, value|
  put User.find(value)
}
然后进入日志文件,我会看到很多数据库请求。     
已邀请:
        即使这可能很慢,而且我怀疑您正在处理的应用程序中的设计还不是最优的(不是判断,我们都去过那里),但Array#index似乎就是您的意思。重新寻找:
@records[@records.index{|user| user.id == 1}]
编辑 尽管如果您需要为每个用户做些事情,并且需要通过id快速访问它们,我可能会在控制器中做类似的事情。即使速度不是真的更快,但可读性更高(无论如何对我来说):
@users_hash = {}
User.all.each{|user| @users_hash[user.id] = user}
然后,您可以执行以下操作:
@users_hash[id].username
    
        使用
User.scoped
代替
User.all
#all
将立即查询数据库并返回一个数组,而
#scoped
将返回一个
ActiveRecord::Relation
对象,您可以将其链接进一步查询。在这种情况下,除非您尝试以某种方式检查或枚举结果,否则不会打数据库     
        其实你错了。
@records.find(1)
返回Enumerator类的对象(与Enumerator类本身不同)。 正如您所注意到的,这里的问题是,
@records
是一个数组,而不是ActiveRecord对象,而
Array#find
(从
Enumerable#find
继承-当没有给出块时,它返回一个Enumerable类的对象)是不同的方法为
ActiveRecord::Base#find
(即
User#find
)。 您应该做的是,在控制器中,选择所需的一个用户记录:
@user = User.find 1
...然后直接在模板中使用
@user
。通常,您应该避免在模板中进行ActiveRecord查找(例如
find
)。这种逻辑应该在您的控制器中发生。     
        上一次出现这种情况的时候,我最终是这样的:
@assignments = Assignment.find_by_sql(\' ... \')

@assignments.find(id: 1).first
    

要回复问题请先登录注册