我需要找到一种解决方法,以便我可以按方法过滤我@events
的.is_near
方法,然后按.sort_today
范围对它们进行排序。
单独它们都可以工作,我可以.is_near
毫无问题地定位到范围的末尾,但是我的结果被 中的默认排序参数所采用.is_near
,我需要对它们进行排序.sort_today
。
有没有办法忽略.is_near
返回/处理我的结果的方式?或者以某种方式将它们链接在一起@events.is_near(session[:city]).sort_today
?目前我在像这样链接它们时收到此错误:#Array:0x007f8ca3c673c0 的未定义方法`sort_today'
这是我的模型:
class Venue < ActiveRecord::Base
attr_accessible :name, :address, :latitude, :longitude
has_many :events, :dependent => :destroy
geocoded_by :address
def self.is_near(city)
self.near(city, 20, :units => :km).map(&:events).flatten
end
end
class Event < ActiveRecord::Base
attr_accessible :title, :details, :start_time, :end_time, :date, :cost, :venue_id
belongs_to :venue
scope :is_today, where(:date => Date.today)
scope :sort_today, is_today.order(:start_time)
class << self
def is_near(*args, &block)
Venue.is_near(*args, &block)
end
end
end
RubyGeocoder Venue
gem 的地理编码也是如此,它包含所有事件。该.is_near
方法必须在,Venue
因为纬度和经度属性在那里。.is_near
底部的方法Event
本质上是一个重定向。(我试图让代表工作,但这是我能做到的唯一方法)
这是我的控制器:
class EventsController < ApplicationController
def index
@events = Event.sort_today.is_near(session[:city]) #returns results but sorted wrong
#@events = Event.is_near(session[:city]).sort_today #returns undefined method `sort_today' error
end
end
class ApplicationController < ActionController::Base
before_filter :set_city
def set_city
unless session[:city].present?
session[:city] = request.location.city
end
end
end
该set_city
方法只是获取用户通过输入字段输入的城市。
编辑:这是 Ruby Geocoder 文档的链接:https ://github.com/alexreisner/geocoder