0
У меня есть таблица posts
и полиморфный стол votes
.Rails 3 Присоединиться к вопросу для голосов Таблица
votes
таблица выглядит следующим образом:
create_table :votes do |t|
t.references :user # user_id
t.integer :vote # the vote value
t.references :votable # votable_type and votable_id
end
Я хочу, чтобы перечислить все сообщения, которые пользователь еще не голосовали в. Сейчас я занимаю все должности, на которые они уже голосовали, и вычитал это из всего набора сообщений. Это работает, но это не очень удобно, поскольку у меня есть это сейчас.
def self.where_not_voted_on_by(user)
sql = "SELECT P.* FROM posts P LEFT OUTER JOIN ("
sql << where_voted_on_by(user).to_sql
sql << ") ALREADY_VOTED_FOR ON P.id = ALREADY_VOTED_FOR.id WHERE (user_id is null)"
puts sql
resultset = connection.select_all(sql)
results = []
resultset.each do |r|
results << Post.new(r)
end
results
end
def self.where_voted_on_by(user)
joins(:votes.outer).where("user_id = #{user.id}").select("posts.*, votes.user_id")
end
Я должен также упомянуть, что я использую metawhere камень. – Dex