0

我有一个Image模型和一个User模型。我通过一个名为likes. 也Image属于一个User

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

这就是我所拥有的:

@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_usersAKAlikes表,您可以看到3,5我的错误来自哪里:

我的桌子

4

1 回答 1

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
于 2013-02-05T07:07:49.627 回答