方法可以获取节点和关系的模式,甚至可以根据关系属性查找关系本身(例如 EnrolledIn.where(since: 2002)
但是根据节点的特定属性获取关系的最佳方法是什么。例如
current_user -[:关系]->事件
我知道事件 ID,所以对我来说,最合乎逻辑的方法是查询模式,将 event.id 作为正在搜索的属性之一。我现在有这样的东西
event_rel = current_user.events(:e, :rel).where(id: event_id).pluck(:rel)
以上不起作用,它返回一个数组
你正在做的很好,pluck(:rel)
总是会返回一个数组。如果你知道你只想要一个rel,那就去做
event_rel = current_user.events(:e, :rel).where(id: event_id).limit(1).pluck(:rel).first
如果您使用的是 github 的主分支,则可以使用first_rel_to
方法,该方法(以及match_to
)正在改变我最近使用 gem 的方式。
event_rel = current_user.events.first_rel_to(event_id)
几天前添加了给它一个 ID 的功能,如果你从 Rubygems 中提取,它将不起作用。3.0.4 中的方法版本不接受 ID,它只接受完整节点。如果您碰巧加载了节点,则可以在已发布版本中执行event_rel = current_user.events.first_rel_to(event)
。
如果你不想使用弹拨,你可以做event_rel = current_user.events.where(id: event_id).
limit(1).each_rel.first
.请注意,如果您省略limit(1)
,则会将这两个节点之间的每个 rel 返回给 Ruby,所以除非您知道只会取回一个,否则不要使用它。当我这样做时,我通常会添加limit(1)
,即使我只认为我会拿回一个rel,因为我喜欢安全。
我建议你将 Gemfile 指向 Github 中的最新提交,只需通读 wiki 中有关 4.0 更改的新部分即可。它很稳定,新功能非常酷。