所以我有一个包含三个基本模型的Rails应用:Entry
,User
和Vote
。我需要一个帮助方法,它会给我一个随机的帖子供用户投票:
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相关联。
但我不想向用户提供他们已投票的帖子。
我怎样才能做到这一点?
答案 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
以获取随机广告。