mysql - 在 Rails 5/mysql 中制定左连接查询时出现的问题

标签 mysql ruby-on-rails activerecord ruby-on-rails-5

数据库中有三张表。 首先,用户有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

您可能缺少 UserItem 之间的关联。

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/

相关文章:

ruby-on-rails - 未在另一个模型中引用的模型的 ActiveRecord 查询

ruby-on-rails - 通过与 :dependent => :destroy Rails 3. 2 的关系删除 has_many 中的对象

mysqli 是 symfony Controller 中的未知类

mysql - 检索特定列中包含相同字段的表

ruby-on-rails - 如何在 group_by 计数查询中获取总结果集大小?

ruby-on-rails - 将 PG::Result 转换为 Active Record 模型

php - 同时插入多行

mysql - 根据条件对行进行分组,得到所有结果

ruby-on-rails - Assets :precompile don't match urls generated by stylesheet_link_tag (missing digest) in minimal rails 4 site 生成的文件

ruby-on-rails - ActiveRecord 日期格式