有很多方法可以获取节点和关系的模式,甚至可以根据关系属性自己查找关系(例如EnrolledIn.where(since: 2002)
但是根据节点的特定属性获取关系的最佳方法是什么例如
current_user - [:relationship] - > event
我知道事件ID,所以对我来说,最合乎逻辑的方法是使用event.id查询模式作为被搜索的属性之一。我现在有类似的东西
event_rel = current_user.events(:e, :rel).where(id: event_id).pluck(:rel)
以上不起作用,它返回一个数组
答案 0 :(得分:0)
您正在做的事情很好,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)
。
如果你不想使用pluck,你可以event_rel = current_user.events.where(id: event_id).
limit(1).each_rel.first
。请注意,如果省略limit(1)
,那将会将这两个节点之间的所有相关内容返回给Ruby,所以除非您知道自己只是要获得一个,否则不要使用它背部。我通常在我这样做的时候添加limit(1)
,即使我只是认为我会让一个人回来,因为我喜欢安全。
我建议你将你的Gemfile指向Github中最近的提交,只需阅读wiki中关于4.0中的更改的新部分。它很稳定,新功能非常酷。