You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rails 7表单中从地理编码结果生成选择选项?

解决步骤

1. 修正地理编码查询

你之前控制台的代码有个关键错误:把经纬度写成了字符串,应该直接传入数值数组。在对应控制器的action(比如表单所在的new/edit方法)里写:

# 前提是current_user已经存储了latitude和longitude字段(需先对用户地址完成地理编码)
@gyms = Gym.near([current_user.latitude, current_user.longitude], 10)

2. 生成下拉选项数组

Rails表单的select控件需要二维数组格式,结构为[[显示文本, 存储值], ...]。推荐用健身房名称做显示文本,id做存储值(后续关联数据更合理),在控制器中生成:

@gym_options = @gyms.map { |gym| [gym.name, gym.id] }

如果确实需要存储名称而非id,可改为:

@gym_options = @gyms.pluck(:name).map { |name| [name, name] }

3. 在表单中正确渲染选择器

直接把生成的@gym_options传入f.select,不需要额外嵌套数组:

<%= f.select :gym1, @gym_options, prompt: "选择附近的健身房" %>

prompt参数是可选的,用来添加默认提示选项。

补充说明

你之前的尝试失败,是因为用[@local_gym_list]把整个列表包成了单个数组元素,导致select把它当成一个选项渲染。另外需要明确:Gym.near返回的是ActiveRecord模型集合(不是Geocoder::Result对象),所以可以直接用map/pluck这类ActiveRecord方法处理。

内容的提问来源于stack exchange,提问作者mwhocl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:57:44