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了。