在Rails中获取随机的,未投票的帖子

时间:2013-04-14 06:46:03

标签: mysql ruby-on-rails ruby activerecord

所以我有一个包含三个基本模型的Rails应用:EntryUserVote。我需要一个帮助方法,它会给我一个随机的帖子供用户投票:

def next_entry
  Entry.where(:receiving_challenge_id => current_voting_challenge.id).offset(rand(Entry.where(receiving_challenge_id: current_voting_challenge.id).count)).first
end

这很有效,每次都会抓一个随机的帖子。

投票由用户和条目拥有,并且它们通过数据库中的ID相关联。

但我不想向用户提供他们已投票的帖子。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

- 获取所有条目的id

- 获取用户投票的所有条目ID

- 从第一个中抽取第二个

- 使用sample方法从该数组中取任何数字,然后从数据库中提取带有该ID的条目:

Entry.find((Entry.all.collect(&:id) - current_user.votes.collect(&:entry_id)).sample)

答案 1 :(得分:0)

首先,获取他们投票的条目。 然后获取所有不同的条目

voted_entries = user.votes.includes(:entry).collect(&:entry)
unvoted_entries = Entry.where('id NOT IN (?)', voted_entries.collect(&:id))

然后,您可以在sample上致电unvoted_entries以获取随机广告。