s のデータベースがありますItem
。各アイテムbelongs_to
_ User
各項目にはvisibility
andstatus
フィールドがあります。検索可能にするには、アイテムが次のルールを満たしている必要があります。
status must be :available
AND
(visibility must be :everyone
OR
(visibility must be :friends AND user_id must be in current_user.friends)
)
つまり、利用可能なすべての公開アイテムが表示され、友達の「非公開」アイテムが表示されます。
この条件に一致するアイテムを取得するにはどうすればよいですか?
私は次のことを試しました:
class Item < ActiveRecord::Base
belongs_to :user
attr_accessible :description, :photo, :title, :user_id, :visibility
#...
scope :searchable, lambda { |user|
where('status IN ? AND (visibility IN ? OR (visibility IN ? AND user_id IN ?))',
[:available, :lent],
[:everyone],
[:friends],
user.friends)
}
end
そして私のコントローラーで:
@items = Item.searchable(current_user)
しかし、私はエラーがあります:
IN で生成された句の周囲に括弧はありません
ActiveRecord::StatementInvalid in Items#search
SQLite3::SQLException: near ",": syntax error: SELECT "items".* FROM "items" WHERE (status IN 'available','lent' AND (visibility IN 'everyone' OR (visibility IN 'friends' AND user_id IN 'foo')))