2

所以我有一个带有三个基本模型的 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 相关联。

但我不想给用户一个他们投票过的帖子。

我怎样才能做到这一点?

4

2 回答 2

1

-获取所有条目的ID

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

- 从第一个减去第二个

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

Entry.find((Entry.all.collect(&:id) - current_user.votes.collect(&:entry_id)).sample)
于 2013-04-14T10:54:12.010 回答
0

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

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

然后你可以打电话sampleunvoted_entries随机取一个。

于 2013-04-14T10:29:27.737 回答