1

有很多方法可以获取节点和关系的模式,甚至根据关系属性查找关系本身(例如EnrolledIn.where(since: 2002),根据节点的特定属性获取关系的最佳方法是什么。例如

current_user -[:relationship]->事件

我知道事件 ID,所以对我来说,最合乎逻辑的方法是使用 event.id 作为正在搜索的属性之一来查询模式。我现在有这样的东西

event_rel = current_user.events(:e, :rel).where(id: event_id).pluck(:rel)

以上不起作用,它返回一个数组

4

1 回答 1

0

你所做的很好,pluck(:rel)总是会返回一个数组。如果你知道你只想要一个rel,那就做

event_rel = current_user.events(:e, :rel).where(id: event_id).limit(1).pluck(:rel).first

如果您使用的是来自 github 的 master 分支,则可以使用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)在发布的版本中进行。

如果您不想使用 pluck,您可以使用event_rel = current_user.events.where(id: event_id). limit(1).each_rel.first. 请注意,如果您省略 ,这会将这两个节点之间的每个 rel 都返回给 Ruby limit(1),所以除非您知道您只会得到一个,否则不要使用它。当我这样做时,我通常会添加limit(1),即使我只认为我会得到一个 rel 回来,因为我喜欢安全。

我建议您将 Gemfile 指向 Github 中的最新提交,只需阅读 wiki 中有关 4.0 更改的新部分。它很稳定,新功能也很酷。

于 2014-11-22T06:19:13.630 回答