我们的应用程序设置了用户搜索,到目前为止只基于文本内容查询。
所以这就是我所拥有的:
在models / user.rb
中def self.search(query)
where("description ilike ?", "%#{query}%")
end
app / controllers / users_controller.rb中的
class UsersController < ApplicationController
before_action :authorized?
def index
@users = User.all
if params[:search]
@users = User.search(params[:search]).order("created_at DESC")
else
@users = User.all.order('created_at DESC')
end
end
在views / index.html.erb
中<%= form_tag(users_path, :method => "get", id: "search-form") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search Users" %>
<%= submit_tag "Search", :name => nil %>
<% end %>
我们正在使用rails和postgres。已安装Geocoder gem。我们将当前纬度和经度存储在单独的列中。
我如何添加邻近搜索过滤器,以及我将采取哪些步骤进行MVC?
位置存储在我们的方案中,如此
create_table "users", force: :cascade do |t|
t.float "latitude"
t.float "longitude"
答案 0 :(得分:0)
是的,地理编码器主页没有太多信息。我在实际的README中找到了更多细节:
https://github.com/alexreisner/geocoder#readme
如果您想通过邮政编码进行搜索,则需要在表单中添加文本字段输入 - 我们可以将其命名为zip_code
。如果您想要一个可变距离,还要添加一个带有表示距离的数值的选择标记,请调用此字段distance
。
然后在服务器端,您需要将zip转换为纬度和经度。
zip_result = Geocoder.search(params[:zip_code])
# Is an array of results, take the first one
if zip_result
result = zip_result.first
lat = result.latitude
lon = result.longitude
# now we can search with our model: we are asking
# Show me all Users within "distance_in_miles" of this geocoded
# zip code
distance_in_miles = params[:distance].to_i
User.search(params[:query]).near([lat, lon], distance_in_miles)
end
这没有任何错误检查或验证 - 它基本上是一个概念验证。
答案 1 :(得分:0)
for object in object_list:
if object.x == 10 and object.y == 10:
current_object = object
break