查询连接表中的位置

时间:2013-02-05 05:37:27

标签: ruby-on-rails ruby-on-rails-3

我有Image模型和User模型。 我和他们一起加入了一个名为likes的HABTM关系。 此外,Image属于User

我正在尝试查找所有不属于用户且未被该用户所喜欢的图像。 我似乎无法想出那里的条件。

这就是我所拥有的:

@image = Image.where("user_id != :user_id AND image_id NOT IN :likes", {:user_id => session[:user].id, :likes => session[:user].likes}).first

以下是我的ImageUser模型:

class Image < ActiveRecord::Base
# attr_accessible :title, :body
 belongs_to :user
 has_and_belongs_to_many :likes, :class_name => 'User'
end

class User < ActiveRecord::Base
 # attr_accessible :title, :body
 has_many :submitted_images, :class_name => 'Image'
 has_and_belongs_to_many :likes, :class_name => 'Image'
end

有人可以帮助我提出这个问题吗?谢谢!

修改

我得到的语法错误:

PG::Error: ERROR:  syntax error at or near "3"
LINE 1: ... FROM "images"  WHERE (user_id != 1 AND image_id NOT IN 3,5) LIMIT...
                                                         ^
: SELECT  "images".* FROM "images"  WHERE (user_id != 1 AND image_id NOT IN 3,5) LIMIT 1

如果您查看我的images_users AKA likes表,您可以在我的错误中看到3,5的来源:

My Table

1 个答案:

答案 0 :(得分:1)

首先,您应该使用一些有意义的名称作为关联。例如,您可以使用has_and_belongs_to_many :appreciators, :class_name => 'User'或类似的东西,这更有意义。虽然您的查询不会受此影响。 :)

无论如何,我建议你当前的设置是:

@image = Image.where("user_id != :user_id AND id NOT IN (:likes)", {:user_id => session[:user].id, :likes => session[:user].likes}).first