La búsqueda a través de la asociación con el geocodificador en los rieles, no puede visitar ActiverCord :: Relación :: ActiverCord_Relation Error

StackOverflow https://stackoverflow.com//questions/24005691

Pregunta

Tengo un recurso de publicaciones que pertenece a un póster (un tipo de usuario) cuya dirección está geocodificada utilizando la gema del geocoder con éxito al registrarse.Ahora quiero que un usuario pueda buscar publicaciones cerca de ellos por distancia.Soy relativamente nuevo en rieles, cualquier ayuda sería muy apreciada.

Obtengo el siguiente error (realmente no sé lo que significa, pensé que creando asociaciones en mis modelos era suficiente)

Cannot visit ActiveRecord::Relation::ActiveRecord_Relation_Poster

index.html.erb

<%= form_tag posts_path, method: :get do %> 
Find postings <%= select_tag "within", options_for_select([["Next door", 0.001],["In your  neighborhood", 0.05], ["Nearby", 0.1]], ["Nearby", 0.1]) %>
<%= submit_tag "Find", :name => nil %>
<% end %>

posts_controller.erb

  def index
if params[:within]
  @posts= Post.where(Poster.near(current_user, params[:within].to_f))
else
 @posts=Post.all
 end
end

Modelo de publicaciones

class Post < ActiveRecord::Base
belongs_to :poster
end

Modelo de cartel

class Poster < User
has_many :posts, dependent: :destroy   
end

Modelo de usuario

class User < ActiveRecord::Base
 def full_address
[address_one, city, state, zip].compact.join(', ')
 end 

geocoded_by :full_address, :latitude => :lat, :longitude => :long
after_validation :geocode, if: -> (full_address){ full_address.present? or     address_changed? }
end

¿Fue útil?

Solución

Acabo de terminar pasando los atributos en la creación de la publicación, deseo que hubiera una manera de resolver mi problema original (hace que la base de datos sea menos redundante)

en mi controlador de post

def create
 @post = current_user.posts.build(post_params)
 @post.assign_attributes(:lat => current_user.lat, :long => current_user.long)
end

def index
if params[:within]
 @posts= Post.near(current_user, params[:within].to_f)
else
 @posts=Post.all
 end
end

también usado "geocodificado por: cartel" en My Posts Model

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