在rails5/mysql中构造左联合查询的问题

bkkx9g8r  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(366)

db中有三个表。首先,有id的用户。第二,有id的项目,第三,有用户id的用户操作,项目id,被删除。


# Item

has_many :user_actions

# User

has_many :user_actions

# UserAction

belongs_to :user
belongs_to :item

只有当用户选择了删除选项时,才能输入用户操作。否则,用户在用户操作表中没有该项的条目。
我必须编写一个查询,以获取用户尚未删除的所有项目。我试着用left-u-join-in-rails5,但我没能让它正常工作。
一些我以前没有传达的信息(我的道歉)。
项目是唯一的。假设我们是从facebook上所有帖子的来源获得的。
有许多用户被添加和删除,就像在订户列表中一样。
所有项目对所有用户都可见,除非用户自己删除它。项目仍然存在,并且对其他可以独立操作的用户可见。
我们需要一个解决方案来解决这个问题,在那里我们可以查询和获得所有的项目,用户还没有删除。

ijnw1ujt

ijnw1ujt1#

假设你的模型是这样的:

class Item < ApplicationRecord
  has_many :user_actions
end

class User < ApplicationRecord
  has_many :user_actions
end

class UserAction < ApplicationRecord
  belongs_to :user
  belongs_to :item
end

你可能错过了 User 以及 Item .

class Item < ApplicationRecord
  belongs_to :user
  has_many :user_actions
end

class User < ApplicationRecord
  has_many :items
  has_many :user_actions
end

当然,运行迁移来添加 user_id 中的列 items table
然后你可以这样做:

your_user     = User.find your_user_id
deleted_items = UserAction.where(user: your_user).map(&:item).map &:id
items         = Item.where(user: your_user).where.not(id: deleted_items)

但是没有更多的信息是很难猜测的

相关问题