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
-
20-12-2019 - |
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
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