Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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
Ruby on rails 我如何使用不带';你不会变吗?_Ruby On Rails_Ruby On Rails 3.1_Sunspot Solr_Websolr - Fatal编程技术网

Ruby on rails 我如何使用不带';你不会变吗?

Ruby on rails 我如何使用不带';你不会变吗?,ruby-on-rails,ruby-on-rails-3.1,sunspot-solr,websolr,Ruby On Rails,Ruby On Rails 3.1,Sunspot Solr,Websolr,我们在Rails 3.1应用程序中使用Sunspot Solr。我们正在搜索一个位置模型。这是搜索的代码 location_search = Location.search do keywords params[:search][:keywords] if params[:search][:keywords].present? with :category_ids, category_id if category_id.present? unless params[:search

我们在Rails 3.1应用程序中使用Sunspot Solr。我们正在搜索一个位置模型。这是搜索的代码

location_search = Location.search do
  keywords params[:search][:keywords] if params[:search][:keywords].present?
  with :category_ids, category_id if category_id.present?


  unless params[:search][:keywords].present?
      order_by :premium, :desc
  end

  if params[:search][:sort].present?
    field, direction = params[:search][:sort].split('-')
  else
    order_by :score, :desc
    order_by :random
  end
  paginate :page => params[:search][:page], :per_page => per_page
end
我的问题是,在保持分页不变的情况下,如何在结果中随机化位置?也就是说,我希望随机对结果进行排序(不是按记录创建日期或名称),但我希望结果的第2页是相同的列表,即使我刷新了页面(并将第2页传递给params[:search][:page])。理想情况下,当前用户会话的顺序将保持不变

这样做的原因是我们网站上的位置按溢价付费,所以溢价结果应该放在第一位,但那些不付费的位置应该随机化,这样我们就不会因为它们创建的顺序或它们基于名称的顺序而偏爱位置


谢谢!非常感谢您的帮助。

您可以检索比所需大得多的页面,按预期对其进行洗牌,然后将其缩小到所需大小。可能是这样的(Random是ruby 1.9类):


您可以检索比所需大得多的页面,按预期对其进行洗牌,然后将其缩小到所需大小。可能是这样的(Random是ruby 1.9类):


不久前,我还在处理一个分页集合,该集合已配置为返回随机排序顺序。我意识到,因为太阳黑子总是向Solr发送一个随机种子值,所以我会在页面之间间歇性地收到重复的结果。为了解决这个问题,我认为在搜索时配置种子值很有用

我认为最有意义的实现是保留现有的语法规范,同时允许order_by函数使用新的参数类型

比如说

Model.search do
  order_by :random, :seed => 12345, :direction => :asc 
end

我实现了这一点,它被合并到
sunspot_rails
gem的master中,使用这个pull请求:

不久前,我还在处理一个分页的集合,该集合被配置为返回随机排序顺序。我意识到,因为太阳黑子总是向Solr发送一个随机种子值,所以我会在页面之间间歇性地收到重复的结果。为了解决这个问题,我认为在搜索时配置种子值很有用

我认为最有意义的实现是保留现有的语法规范,同时允许order_by函数使用新的参数类型

比如说

Model.search do
  order_by :random, :seed => 12345, :direction => :asc 
end

我实现了这一点,并将其合并到
太阳黑子轨道
gem的master中,使用这个pull请求:

您可以使用与我在这里回答的相同的技术

太阳黑子支持使用随机种子。请参见此处的文档:

因此,您要做的(请参阅我的其他答案了解详细信息)是在用户会话中生成并存储一个随机数。然后将此数字用作随机检索方法的种子:

Sunspot.search(Post) do
  paginate(:page => 2, :per_page => 15)
  order_by(:random, :seed => session_specific_random_seed)
end

你可以使用我在这里回答的相同技巧

太阳黑子支持使用随机种子。请参见此处的文档:

因此,您要做的(请参阅我的其他答案了解详细信息)是在用户会话中生成并存储一个随机数。然后将此数字用作随机检索方法的种子:

Sunspot.search(Post) do
  paginate(:page => 2, :per_page => 15)
  order_by(:random, :seed => session_specific_random_seed)
end

这对我来说不是一个真正的解决方案。我正在为每个位置检索大量数据,但这已经不是世界上速度最快的事情了。这太慢了。这对我来说不是一个真正的解决方案。我正在为每个位置检索大量数据,但这已经不是世界上速度最快的事情了。这太慢了。