Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何从具有关联的条件ActiveRecord查询中获取值数组?_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby 如何从具有关联的条件ActiveRecord查询中获取值数组?

Ruby 如何从具有关联的条件ActiveRecord查询中获取值数组?,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我希望在我的一个对象上定义一个方法,只要同一记录中的另一列满足某些条件,该方法将只从其所有子对象返回一列数据 例如,如果我有两个对象 ParentObject has_many: child_objects #fields name (string) ChildObject belongs_to: parent_object #fields name (string) whitelisted_at (datetime) 我已经了解到,我可以根据使用.where

我希望在我的一个对象上定义一个方法,只要同一记录中的另一列满足某些条件,该方法将只从其所有子对象返回一列数据

例如,如果我有两个对象

ParentObject
  has_many: child_objects

  #fields
  name (string)

ChildObject
  belongs_to: parent_object

  #fields
  name (string)
  whitelisted_at (datetime)
我已经了解到,我可以根据使用.where()指定的条件获取父对象的所有子对象记录的列表。例如,在我的控制器中,我有如下代码:

ParentObject.child_objects.where("whitelisted_at IS NOT NULL")
#<ActiveRecord::AssociationRelation [
<ChildObject id: 1, name:"Susan", whitelisted_at: "2015-02-18 12:07:37">,
<ChildObject id: 1, name:"Simon", whitelisted_at: "2015-02-18 12:07:37">, 
<ChildObject id: 1, name:"Sally", whitelisted_at: "2015-02-18 12:07:37">
]
这给了我一个活跃的记录助理,如下所示:

ParentObject.child_objects.where("whitelisted_at IS NOT NULL")
#<ActiveRecord::AssociationRelation [
<ChildObject id: 1, name:"Susan", whitelisted_at: "2015-02-18 12:07:37">,
<ChildObject id: 1, name:"Simon", whitelisted_at: "2015-02-18 12:07:37">, 
<ChildObject id: 1, name:"Sally", whitelisted_at: "2015-02-18 12:07:37">
]

#在父模型中,您可以使用ActiveRecord提供的Pull方法(Stefan的道具-请参阅)

class-ParentObject
self.child\u objects.where.not(where.not(whitelisted\u at:nil).map(&:name)似乎起作用。。。太棒了,非常感谢。嗯,地图()嗯?我想我应该去读一下。你能解释一下&在最后的方法中做了什么吗?使用.where.not()而不是.where(“whitelisted_at is not NULL”)还有什么好处吗?我认为where.not更惯用,更容易阅读,但这是一种风格,它们都做同样的事情。用proc方法为地图添加了信息。啊,proc,还有一个在新手学习列表上。感谢所有的帮助,我会在timelock过期时将此标记为已回答!或者:
child\u objects.where.not(where.not(whitelisted\u at:nil).pulk(:name)
有一个
pulk
方法,我认为它也适用于条件句,但可能是错误的;有一段时间没有使用Rails了。