Ruby on rails 在rails中选择某些用户

Ruby on rails 在rails中选择某些用户,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在编写一个僵尸生存应用程序,我正在尝试选择所有标记为alive的用户,其中:alive是一个布尔值。 我在我的用户控制器中编写了一个私有方法,但无法正确使用ruby,有人有指针吗 def get_alive @holder = (User.map {|user| user}) @user = @holder.each {|i| if i.alive @user << i} end 谢谢您需要更详细地说明持有者应该是什么。。。为什么你要和“我”相比 否则: Use

我正在编写一个僵尸生存应用程序,我正在尝试选择所有标记为alive的用户,其中:alive是一个布尔值。 我在我的用户控制器中编写了一个私有方法,但无法正确使用ruby,有人有指针吗

 def get_alive
   @holder = (User.map {|user| user})
   @user = @holder.each {|i| if i.alive @user << i}
 end

谢谢

您需要更详细地说明持有者应该是什么。。。为什么你要和“我”相比

否则:

User.where(:alive => true)

最好将其封装在一个范围内,如肖恩·希尔的回答所示

如果用户是活动记录,您可以直接选择这些用户:

User.where(:alive => true)
或仅针对这些用户进行筛选:

User.all.filter(&:alive)

使用作用域查找所有活动用户

class User < ActiveRecord::Base
  scope :alive, where(:alive => true)
  # ... the rest of your model ...
end

您甚至可以在where查询中使用此语法

User.where(alive: true)
或者在对象数组上使用“选择”。但是选择很慢

User.all.select{ |user| user.alive == true}

@holder只是一个随机的实例变量,我用来保存整个列表,你不需要它。您可以使用.each迭代上述选择的结果,也可以附加.all以获得完整的列表。嗯,不知道为什么我在这个问题上投了反对票。如果在整个应用程序中,聚集活跃的用户将是常见的事情,最好为它创建一个作用域。@Adam使用作用域的优点是,您可以在整个代码中键入.alive,而不必反复重复整个“where”语句。当您在整个应用程序中有一些复杂的查询需要重复时,其好处就更加明显了。这个例子有点琐碎,但最好从一开始就冷静思考。使用作用域的另一个好处是链接功能。假设你有范围:处于危险中,健康在哪里
User.all.select{ |user| user.alive == true}