如何在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
相关产品推荐
相关产品推荐

