Postgresql Rails 4.2+Postgres不等于!=关于多态关联的内连接
我试图返回所有属于Hnode的帖子,并且这些帖子没有被用户隐藏。我有一个“隐藏”表,允许用户隐藏帖子。Hide是一个多态关联,可以隐藏,因为我还有可以隐藏的注释。当用户隐藏帖子时,将使用以下数据创建隐藏记录:Postgresql Rails 4.2+Postgres不等于!=关于多态关联的内连接,postgresql,ruby-on-rails-4,polymorphic-associations,Postgresql,Ruby On Rails 4,Polymorphic Associations,我试图返回所有属于Hnode的帖子,并且这些帖子没有被用户隐藏。我有一个“隐藏”表,允许用户隐藏帖子。Hide是一个多态关联,可以隐藏,因为我还有可以隐藏的注释。当用户隐藏帖子时,将使用以下数据创建隐藏记录: Hide: id: #{some_id} hideable_type: 'Post' hideable_id: #{some_post_id} user_id: #{some_user_id} 我想获取用户未隐藏的帖子。有关模型和关联,请参见下文 简言之,当我试图删除当
Hide:
id: #{some_id}
hideable_type: 'Post'
hideable_id: #{some_post_id}
user_id: #{some_user_id}
我想获取用户未隐藏的帖子。有关模型和关联,请参见下文
简言之,当我试图删除当前用户隐藏的所有帖子(由多对多关联表隐藏表示)时,我得到了应该隐藏的结果:
posts = Post.where(hnode_id: params[:hnode_id])
.joins("LEFT JOIN hides ON hides.hideable_type = 'Post' AND hides.hideable_id = posts.id AND hides.user_id != #{current_user.id}")
用户加载0.3ms从用户中选择用户。*其中users.deleted_at为NULL且users.uid=$1 LIMIT 1[[uid,email@fake-电子邮箱]]
Post Load 0.7ms选择Post.*从Post左侧连接隐藏上的隐藏。hideable_类型='Post'和hides.hideable_id=posts.id和hides.user_id!=1其中posts.deleted_at为NULL,posts.hnode_id=$1 ORDER BY posts.id DESC LIMIT 10 OFFSET 0[[hnode_id,12]]
我的数据是正确的-这意味着我在user_id列中确实有当前用户id的隐藏记录
以下是我的模型与适当的关联:
#app/models/post.rb
class Post < ActiveRecord::Base
has_many :hides, as: :hideable
...
end
#app/models/hnode.rb
class Hnode < ActiveRecord::Base
has_many :posts
...
end
# app/models/hide.rb
class Hide < ActiveRecord::Base
belongs_to :user
belongs_to :hnode
belongs_to :hideable, polymorphic: true
...
end
# app/models/user.rb
class User < ActiveRecord::Base
has_many :hides
has_many :posts
...
end
基于多对多关系关联(例如基于hides.user\u id的hides)从查询结果中排除帖子的正确方法是什么
提前谢谢 并隐藏.user_id!=1不属于WHERE子句。它有效地将左连接转换为普通连接。我不知道这是你的意图;问题不是很清楚。嗨,wildplasser,我澄清了问题并简化了设置。我相信你是对的,我有兽皮。用户id!=1在错误的位置-意味着它应该在连接调用中。我会看看我能想出什么。谢谢