我有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
以下是我的Image
和User
模型:
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
的来源:
答案 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