数据库中有三张表。 首先,用户有id。 其次,具有 id 的项目, 第三,user_actions 具有 user_id、item_id、is_deleted。
#Item
has_many :user_actions
#User
has_many :user_actions
#UserAction
belongs_to :user
belongs_to :item
仅当用户选择删除选项时才会出现 User_actions 条目。否则,用户在 user_actions 表中没有该项目的条目。
我必须编写一个查询来获取用户尚未删除的所有项目。 我尝试在rails5中使用left_join,但无法让它正常工作。
一些我之前没有传达的信息(抱歉)。
- 元素是独一无二的。假设我们从 Facebook 上的所有帖子等来源获取它。
- 有大量用户被添加和删除,例如订阅者列表。
- 所有项目对所有用户都是可见的,除非用户自己删除它。项目仍然存在,并且对可以独立操作的其他用户可见。
我们需要一个解决方案来解决这个问题,我们可以在其中查询并获取用户未删除的所有项目。
最佳答案
假设您的模型如下:
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
当然,还要运行迁移以在 items
表中添加 user_id
列
然后你可以这样做:
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)
但如果没有更多信息,很难猜测
关于mysql - 在 Rails 5/mysql 中制定左连接查询时出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51579064/