代码之家  ›  专栏  ›  技术社区  ›  Pete Alvin

find()之后,ActiveRecord是否支持按特定字段值访问/查找内存行(除了使用主键查找之外)?

  •  1
  • Pete Alvin  · 技术社区  · 14 年前

    在.Net世界中,我可以使用任意的SELECT语句并将许多行加载到DataTable对象中。然后,我可以使用各种字段条件(Name='Jack',Age=34,等等)找到各种数据行。

    在rubyonrails中,执行此操作后将所有员工加载到内存中

    rs = Employee.find(:all)
    

    row = rs.seek(:name => 'Jack')
    

    否则,我将不得不遍历所有行并构建自己的哈希表。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Bryan Ash    14 年前

    假设您有充分的理由获取所有数据,然后对其进行过滤,而不是使用Rails动态查找器或作用域。

    ActiveRecord find返回一个数组,正如上面其他人所评论的那样。你真的很接近,但你需要的数组方法是 find module Enumerable

    all_employees = Employee.find(:all)
    
    jack = all_employees.find { |employee| employee.name == 'Jack' }
    
        2
  •  2
  •   Codebeef    14 年前
    Employee.find(:all)
    

    将返回一个 array ,因此您可以在数组中搜索相关记录或执行以下操作:

    row = Employee.find_by_name('Jack')
    

    rows = Employee.find_all_by_name('Jack')
    

    以便选择您感兴趣的行。