Pergunta

Esperamos que seja simples.Mas eu cacei por algumas horas agora e não consigo fazer isso funcionar.Tenho usuários que têm vários endereços, estou tentando usar Geocoder gem para exibir esses usuários por uma pesquisa de CEP, meu código é muito semelhante ao que está no Geocoder Railscast.

Aqui está minha tentativa de controlador 1 e retorna "método indefinido` Endereços '"

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

Esta é a tentativa número 2, que retorna "constante não inicializada ProfilesController :: Addresses" (não sei se o bit Profile.where vai funcionar, mas nem chega a essa 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

Estes são meus 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?

Muito obrigado por dar uma olhada!

Foi útil?

Solução

Além disso, você pode alterar o seguinte para obter todos os perfis:

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

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

Se houver endereços correspondentes, encontre o perfil de cada endereço.

Outras dicas

Para o número 2, você deve alterar de Addresses.near(params[:search], 25, :order => :distance) para Address.near(params[:search], 25, :order => :distance).

Descobri que não conseguia paginar com a resposta aceita.Então eu fiquei muito sujo:

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')

Se alguém tiver uma maneira mais agradável e escalonável de fazer isso (de preferência com escopos), adoraria saber.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top