У меня есть приложение rails, использующее плагин acts_as_rateable
.
Я застрял в выяснении, как извлечь модели без рейтинга с помощью этого плагина - однако это скорее общий вопрос rails / SQL, чем специфический для этого плагина.
Действует как оцениваемое, добавляет к схеме следующее:
create_table "ratings", :force => true do |t|
t.integer "rating", :default => 0
t.string "rateable_type", :limit => 15, :default => "", :null => false
t.integer "rateable_id", :default => 0, :null => false
t.integer "user_id", :default => 0, :null => false
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "ratings", ["user_id"], :name => "fk_ratings_user"
И мои оцененные модели также имеют столбец идентификатора пользователя.
Я хотел бы иметь возможность получить все экземпляры конкретной модели, которые вообще не были оценены, а также все экземпляры, которые не были оценены кем-либо, кроме создателя модели, например, вот одна модель:
class Review < ActiveRecord::Base
acts_as_rateable
belongs_to :user
...
end
Итак, я хочу что-то вроде следующего псевдокода
Review.find(:all, :conditions=>"not rated by anyone")
Review.find(:all, :conditions=>"not rated by anyone except review.user")
Однако я не могу понять, как это сделать с помощью SQL, так и с помощью магии рельсов, чтобы генерировать этот SQL: -)
Обновление: этот запрос, кажется, находит все модели, которые оцениваются кем-то, кроме пользователя, которому принадлежит модель. Поэтому я думаю, что мне просто нужно как-то инвертировать это.
Review.find(:all,
:joins=>'left join ratings on reviews.id=ratings.rateable_id && ratings.rateable_type="Review"',
:conditions=>'reviews.user_id <> ratings.user_id',
:group=>'reviews.id')