2

我正在将 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
4

0 回答 0