2

Breve というモデルで Geocoder gem を使用しています。Geocoder は、基準点の半径のすべての「breves」を含む Relation を返すメソッド near([latitude, longitude], radius) を提供します。breves の 2 つのリストが存在するビューを作成したいと思います。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