Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在Rails中随机获取一个未引导的on post_Mysql_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Mysql 在Rails中随机获取一个未引导的on post

Mysql 在Rails中随机获取一个未引导的on post,mysql,ruby-on-rails,ruby,activerecord,Mysql,Ruby On Rails,Ruby,Activerecord,因此,我有一个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)).firs

因此,我有一个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进行关联

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


我怎样才能做到这一点

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

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

然后,您可以在
未引导的\u条目上调用
sample
,以获得一个随机条目。

-获取条目的所有id


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

-从第一个中减去第二个

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

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

如果用户没有对任何条目进行投票,则此操作将不起作用。[第二个答案,注释]不知道这一点,这很遗憾。示例不被认为是非常糟糕的Rails实践吗?是的,但这里实际上是从ID数组而不是从ActiveRecord::Relation对象中获取示例!无论哪种方式,在您的示例中,您都必须使用sample方法,因为您不知道所有条目中的所有id,这不像在某些示例中,您可以选择10以下的任何数字并获取id,您必须检索所有id->必须检索所有记录。