Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Rails 4.2+Postgres不等于!=关于多态关联的内连接_Postgresql_Ruby On Rails 4_Polymorphic Associations - Fatal编程技术网

Postgresql Rails 4.2+Postgres不等于!=关于多态关联的内连接

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} 我想获取用户未隐藏的帖子。有关模型和关联,请参见下文 简言之,当我试图删除当

我试图返回所有属于Hnode的帖子,并且这些帖子没有被用户隐藏。我有一个“隐藏”表,允许用户隐藏帖子。Hide是一个多态关联,可以隐藏,因为我还有可以隐藏的注释。当用户隐藏帖子时,将使用以下数据创建隐藏记录:

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在错误的位置-意味着它应该在连接调用中。我会看看我能想出什么。谢谢