【发布时间】:2015-01-12 07:46:47
【问题描述】:
我正在尝试使用地理编码器 gem,以便登录的用户可以查看位于 5 英里内的其他用户的列表,但似乎无法让 gem 显示结果.如 gem 手册中所示,我的表中有经度和纬度列,并且我的所有测试用户都存在这些属性,并且彼此相距 5 英里,所以这应该可以工作。但是,我的视图页面 (_network.html.erb) 目前没有显示任何结果。我是编码新手,非常感谢您的帮助。下面的代码,谁能告诉我我做错了什么,以及如何修复?
users_controller
class UsersController < ApplicationController
before_filter :authenticate_user!
helper_method :sort_column, :sort_direction
def index
@users = User.near([current_user.longitude, current_user.latitude], 500).order(sort_column + " " + sort_direction).paginate(:per_page => 5, :page => params[:page])
end
def show
@user = User.find(params[:id])
end
def new
end
def create
end
def edit
end
def update
@user = User.find(params[:id])
if @user.update(user_params)
flash[:success] = "Your profile has been updated!"
redirect_to @user
else
flash[:error] = "Please try again"
redirect_to edit_profile_user_path(@user)
end
end
def destroy
end
def edit_profile
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_industry, :years_in_current_industry, :hobbies, :previous_industries, :bio, :ip_address, :latitude, :longitude, :linkedin)
end
def sender
@user = User.find(params[:id])
end
def recipient
@user = User.find(params[:id])
end
def geolocate
@user = User.find(params[:id])
if @user.updated_at < 1.day.ago || params[:force] == 'true'
if @user.update_attributes(latitude: params[:latitude].to_f, longitude: params[:longitude].to_f)
render nothing: true, status: 200
else
render nothing: true, status: 500
end
else
render nothing: true, status: 304
end
end
private
def sort_column
User.column_names.include?(params[:sort]) ? params[:sort] : "years_in_current_industry"
end
def sort_direction
%w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
end
def geolocate_user
location = request.location
@user.update_attributes(latitude: location.latitude, longitude: location.longitude)
redirect_to :controller=>'users', :action => 'index'
end
end
用户.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :remember_me, :current_industry, :years_in_current_industry, :hobbies, :bio, :ip_address, :latitude, :longitude, :previous_industries, :linkedin
reverse_geocoded_by :latitude, :longitude
def full_name
[first_name, last_name].join(" ")
end
end
index.html.erb
<div id='user_id' data-user=<%= current_user.id %>></div>
<h1>Network</h1>
<%= submit_tag 'GEOLOCATE ME', :type => 'button', class: 'geo-button' %>
<div class ="network">
<div class="network-body">
<div id="network"><%= render 'network' %></div>
</div>
</div>
<br>
_network.html.erb
<table class="table">
<thead>
<tr>
<th>Name</th>
<th><%= sortable "current_industry", "Current Industry" %></th>
<th><%= sortable "years_in_current_industry", "Years" %></th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= link_to user.full_name, user_path(user.id) %></td>
<td><%= user.current_industry %></td>
<td><%= User::EXPERIENCE[user.years_in_current_industry] %></td>
</tr>
<% end %>
</tbody>
</table>
<%= will_paginate @users %>
【问题讨论】:
-
既然你有
current_user,你能不能不这样做-current_user.nearbys(500)。还要在 rails 控制台上检查这个,看看你是否得到了一些结果。我的意思是在控制台上测试它,一旦它知道结果很好,就显示在你的视图中。 -
什么意思?你会把这段代码放在哪里?
标签: ruby-on-rails rails-geocoder