0

ImageモデルとモデルがありUserます。私はそれらをと呼ばれるHABTM関係で結合しますlikes。また、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_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 に答える