如何从地理编码列表中创建表单中的选择选项?

问题描述 投票:0回答:1

这是我第一次对任何东西进行地理编码。我尝试了很多不同的选择,但我已经忘记了我尝试过的内容。我有一个gym.rb 模型,列出了一个州的所有健身房。我正在使用 Rails geocoder gem 从用户地址进行搜索,以获取用户地址 10 英里范围内的所有健身房。然后我只想获取 10 英里内那些健身房的名称,并将它们放入 f.select :gym1 表单中。我不知道该怎么做。使用 Rails 7.

健身房型号:

  class Gym < ApplicationRecord

  geocoded_by :address
  after_validation :geocode

  def address
    [street, city, state, zip].compact.join(", ")
  end

  def address_changed?
    street_changed? || city_changed? || zip_changed? || state_changed?
  end
end

在 Rails 控制台中我运行:

@gyms = Gym.near(["current_user.latitude, current_user.longitude"], 10)

我得到了一份健身房列表: ID: 姓名: 地址:

在地理编码器文档中: 地理编码器::结果对象,结果

我不知道如何在这里提取健身房名称并将它们放入选择数组中。要访问每个健身房名称,您必须编写“result.first.name”,然后为第二个名称编写“result.second.name”

一旦我有了这个列表,我就把它分配给一个 @instance 变量,例如: @local_gym_list = [结果.第一个.名称, 结果.第二个.名称, ...]

然后我尝试使用静态@local_gym_list并以形式进行:

<%= f.select :gym1, [@local_gym_list] %>

但这不起作用。那么有人可以帮助我展示如何将地理编码搜索名称放入 @local_gym_list 中,然后将其作为表单中的选择器吗?

ruby-on-rails ruby rails-geocoder
1个回答
0
投票

您将字符串

"current_user.latitude, current_user.longitude"
而不是坐标传递给该方法。

从修复错误开始:

@gyms = Gym.near([current_user.latitude, current_user.longitude], 10)

然后重构:

class User
  # ...
  def coordinates
    [latitude, longitude]
  end 
end

@gyms = Gym.near(current_user.coordinates, 10)

在此处创建选择与任何其他记录集合没有什么不同。

只需使用 Rails 提供的 collection helpers 并向其传递您要创建的输入的名称、集合、值方法和标签方法。

<%= form.collection_select(:gym_id, @gyms, :name, :id) %>

一旦我有了这个列表,我就把它分配给一个@instance变量,比如:@local_gym_list = [result.first.name, result.second.name, ...]

在 Ruby 中,您永远不需要手动将事物的集合分配给数组。如果你发现自己做了这样的事情,那就很明显你做错了。

© www.soinside.com 2019 - 2024. All rights reserved.