【问题标题】:Stuck trying to figure out Rails association卡住试图找出 Rails 关联
【发布时间】:2020-09-24 18:10:36
【问题描述】:

我有两个模型 - UserNetwork。在我的例子中,每个User 可以有多个Network,每个Network 可以有多个User,并且属于一个User(创建者)。

例如,假设User 1 有两个网络N1N2。网络N1 具有User 2,网络N2 具有User 3

我想要实现的是N1N2creator 字段将给我User 1N1users 字段将给我[User 2]N2会给我[User 3]

我可以拥有带有外键的创建者字段,并且我知道我可以使用has_many through: 关系来确定哪些网络包含哪些用户以及哪些用户属于哪些网络。但是在那种情况下,有没有办法快速判断两个用户之间是否存在关系?

例如user2.follows? user1 之类的内容将返回true,因为User 2 属于User 1 的网络。我可以遍历User 1创建的所有网络并检查User 2是否属于它,但是有没有更好的方法?

【问题讨论】:

  • 那么,您到底想通过什么来识别它们?您提供的只是用户通过网络连接,但您想在不通过网络比较的情况下识别他们?
  • @tblev 是的,基本上我希望任何属于其他用户网络的用户都将相关。

标签: ruby-on-rails database activerecord database-migration


【解决方案1】:

我推荐包含方法,

可以使用如下方法user1.N1.include?(user2)

如果这个方法和你想要的不一样,请更具体的例子

当然我明白了,请尝试采摘方法,

User.join(:networks).where(id: user1.id).pluck(:belonged user2 column)

这意味着我联合了 User 和 Network 模型,然后在 where 方法中找到用户,

最后,搜索属于user2的列

属于user2列是标识网络模型中的user2,

【讨论】:

  • 我们还是要通过网络。我想要像user2.follows? user1 这样的东西,无需用户遍历每个网络即可完成
猜你喜欢
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多