Pesquisando através da associação com o Geocoder on Rails, não é possível visitar o erro ActiveRecord::Relation::ActiveRecord_Relation
-
20-12-2019 - |
Pergunta
Eu tenho um recurso Posts que pertence a um Poster (um tipo de usuário) cujo endereço é geocodificado usando a gema Geocoder com sucesso no registro.Agora quero que um usuário possa pesquisar postagens próximas a ele por distância.Sou relativamente novo no Rails, qualquer ajuda seria muito apreciada.
Recebo o seguinte erro (não sei realmente o que isso significa, pensei que configurar associações em meus modelos fosse 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 postagens
class Post < ActiveRecord::Base
belongs_to :poster
end
Modelo de pôster
class Poster < User
has_many :posts, dependent: :destroy
end
Modelo de usuário
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
Solução
Acabei passando os atributos na criação do post, gostaria que houvesse uma maneira de resolver meu problema original (torna o banco de dados menos redundante)
no meu Post Controller
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
Também usei "geocodificado por: poster" no meu modelo de Postagens