我正在使用Geocoder gem和一个名为Breve的模型。 Geocoder提供了一种靠近([纬度,经度],半径)的方法,返回一个包含所有" breves"在参考点的半径内。我想创建一个视图,其中将有2个breve列表,1个按其上次更新时间的反向时间顺序排序,1个基于与给定参考点的接近度(在下面的代码中,它是巴黎的中心)。
Breve.near(@reference_point,10)
当我测试该线时,Relation实际上是从距离参考点最近到最远的breve排序的。但是,当我通过控制器将其传递给视图时,它会按照与其他列表相反的时间顺序显示。
我尝试了几件事,但到目前为止我无法弄明白。下面是控制器和视图的代码,以及Breve模型:
controllers/static_pages_controller
require 'will_paginate/array'
class StaticPagesController < ApplicationController
def home
@update_ordered = Breve.paginate(page: params[:page])
@reference_point = [48.85, 2.35]
ordered = Breve.near(@reference_point,10)
#binding.pry
@location_ordered = Breve.near(@reference_point,10).paginate(page:
params[:page])
end
def content
end
def contribute
end
end
查看视图/ static_pages / home.html.erb
<div class="span5 pull-left">
<h3>Liste classée par date de dernière modification</h3>
<ul class="list">
<%= render @update_ordered, detail: 'time_update' %>
</ul>
<%= will_paginate @update_ordered %>
</div>
<div class="span5 pull-right">
<h3>Liste classée par distance au centre de Paris</h3>
<ul class="list">
<%= render @location_ordered, detail: 'distance' %>
</ul>
<%= will_paginate @location_ordered %>
</div>
和模型模型/ breve.rb
class Breve < ActiveRecord::Base
attr_accessible :description, :title, :location, :source_name, :source_URL,
:latitude,:longitude
has_paper_trail
reverse_geocoded_by :latitude, :longitude
validates :title, presence: true
validates :title, :length => { :maximum => 100 }
validates :location, :length => { :maximum => 100 }
validates :description, :length => { :maximum => 2000 }
validates :source_name, :length => { :maximum => 100 }
validates :latitude, presence: true
validates :latitude, numericality: true
validates :latitude, :numericality => {
:greater_than => -90,
:less_than => 90
}
validates :longitude, presence: true
validates :longitude, numericality: true
validates :longitude, :numericality => {
:greater_than => -180,
:less_than => 180
}
default_scope order: 'breves.updated_at DESC'
end
end