在rails5 / mysql

时间:2018-07-29 09:44:02

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

数据库中有三个表。 首先,具有ID的用户。 其次,具有ID的项目 第三,具有user_id,item_id和is_deleted的user_actions。

#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上的所有帖子等来源获得它。
  • 有许多用户正在添加和删除,例如在订户列表中。
  • 所有用户都可以看到所有项目,除非用户自己删除。该项目仍然存在,并且对其他可以独立行动的用户可见。

我们需要一种解决方案来解决此问题,在这里我们可以查询并获取用户尚未删除的所有项目。

1 个答案:

答案 0 :(得分:0)

假设您的模型如下:

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

当然还要运行迁移以在user_id表中添加items

然后您可以执行以下操作:

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)

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