Pregunta

Con suerte, esto será sencillo.Pero he cazado durante un par de horas y parece que no puedo hacer que esto funcione.Tengo usuarios que tienen varias direcciones, estoy tratando de usar la gema Geocoder para mostrar estos usuarios mediante una búsqueda de código postal, mi código es muy similar al del Geocoder Railscast.

Aquí está mi intento de controlador 1 y devuelve "método indefinido 'Direcciones'"

def index
  if params[:search].present?
    @profiles = Profile.Addresses.near(params[:search], 25, :order => :distance)
    @title = "Therapists Near " + :search
  else
  @profiles = Profile.all
  @title = "Everyone"
  end
end

Este es el intento número 2, esto devuelve "ProfilesController :: Addresses constante no inicializada" (no sé si el bit Profile.where funcionará, pero ni siquiera está llegando a esa parte ...)

class ProfilesController < ApplicationController

  def index
    if params[:search].present?
      addresses = Addresses.near(params[:search], 25, :order => :distance)
      @profiles = Profile.where(:id => addresses.id)
      @title = "Therapists Near " + :search
    else
    @profiles = Profile.all
    @title = "Everyone"
    end
  end

Aquí están mis modelos:

class Profile < ActiveRecord::Base
  has_many :addresses, :dependent => :destroy
  accepts_nested_attributes_for :addresses, :reject_if => lambda { |a| a[:street].blank? }, :allow_destroy => true

class Address < ActiveRecord::Base
  belongs_to :profile
  geocoded_by :street
  after_validation :geocode, :if => :street_changed?

¡Muchas gracias por echar un vistazo!

¿Fue útil?

Solución

Además, puede cambiar a lo siguiente para obtener todos los perfiles:

addresses = Address.near(params[:search], 25, :order => :distance)

@profiles = addresses.map{ |ad| ad.profile }.uniq unless addresses.nil?

Si hay direcciones coincidentes, busque el perfil de cada dirección.

Otros consejos

Para el número 2, debe cambiar de Addresses.near(params[:search], 25, :order => :distance) a Address.near(params[:search], 25, :order => :distance).

Descubrí que no podía paginar con la respuesta aceptada.Así que me puse bastante sucio:

addresses = Address.near(params[:search], 25, :order => :distance)
locations_id_array = []  
addresses.each do |address| 
  addresses_id_array << address.id
end  
@profiles  = Profile.where(:address_id => addresses_id_array).paginate(:page => params[:page],  :per_page => 5).order('name DESC')

Si alguien tiene una forma más agradable y escalable de hacer esto (preferiblemente con visores), me encantaría escucharla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top