À la recherche d'une association avec Geocoder sur les rails, ne peut pas visiter Activerecord :: Relation :: Erreur ActiveRecord_Relation
-
20-12-2019 - |
Question
J'ai une ressource de poste qui appartient à une affiche (type d'utilisateur) dont l'adresse est géocodée à l'aide du gemme géocoder avec succès lors de l'inscription.Maintenant, je souhaite qu'un utilisateur capable de rechercher des messages à proximité de leur distance.Je suis relativement nouveau dans les rails, toute aide serait grandement appréciée.
Je reçois l'erreur suivante (je ne sais pas vraiment ce que cela signifie, je pensais que la création d'associations dans mes modèles était suffisante)
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
Modèle de messages
class Post < ActiveRecord::Base
belongs_to :poster
end
modèle d'affiche
class Poster < User
has_many :posts, dependent: :destroy
end
modèle utilisateur
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
La solution
Je viens de faire passer les attributs sur la création du poteau, je souhaite qu'il y ait un moyen de résoudre mon problème d'origine (rend la base de données moins redondante)
dans mon post-contrôleur
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
également utilisé "géocodé par: poster" dans mon modèle de messages