【问题标题】:Rails: HABTM Relationship. Retrieve the object that has two referencesRails:HABTM 关系。检索具有两个引用的对象
【发布时间】:2015-08-21 00:54:40
【问题描述】:

我有这些模型

class User < ActiveRecord::Base
   has_and_belongs_to_many :chats
end

class Chat < ActiveRecord::Base
   has_and_belongs_to_many :users
end

这是一个多对多关系,我想要恢复与 2 个用户存在的唯一可能的聊天

例如。

me = current_user
user_to_chat = User.find(any_user_except_me)

chat = Chat.new

me.chats.each do |current_chat|
  if current_chat.users.include?(user_to_chat)
    chat = current_chat
    break
  end
end

执行此查询的更好方法是什么?

谢谢!

【问题讨论】:

  • 如果可以,您应该考虑将这些更改为:has_many :through 关系。除非您使用的是旧版本的 Rails,否则这是一个更好的结构。
  • 我会进一步了解。谢谢

标签: sql ruby-on-rails ruby activerecord has-and-belongs-to-many


【解决方案1】:

您可以使用#find,它将返回集合中的第一项,该块不是false

chat = me.chats.find { |c| c.users.include?(user_to_chat) }

你也可以使用交叉点:

chat = (me.chats & user_to_chat.chats).first

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多