我正在将 Geocoder gem 与一个名为 Breve 的模型一起使用。Geocoder 提供了一个方法 near([latitude, longitude], radius) 返回一个包含参考点半径中所有“breves”的关系。我想创建一个视图,其中将有 2 个 breves 列表,1 个按上次更新时间的倒序排列,1 个基于与给定参考点的接近程度(在下面的代码中,它是巴黎的中心)。
Breve.near(@reference_point,10)
当我测试那条线时,关系实际上是从离参考点最近到最短的地方排序的。但是,当我通过控制器将它传递给视图时,它会像其他列表一样按时间倒序显示。
我已经尝试了几件事,但到目前为止我无法弄清楚。下面是控制器和视图的代码,以及 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
视图views/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>
和模型 models/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