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

Ruby on Rails 5.2.2 视图select组件展示Hash数据并绑定ID值咨询

问题原因

当前Usuario::PREVISION为符号数组,视图中collect返回单元素数组,Rails select辅助方法会将该元素同时作为下拉选项的显示文本与value属性值,因此渲染后value为字符串FONASA/ISAPRE,而非你需要的常量对应的数值ID。

解决方案

方案一:优化模型定义(更推荐,可维护性更高)

先调整Usuario模型中PREVISION的结构为哈希,直接绑定名称与对应ID:

class Usuario < ApplicationRecord
  FONASA  = 1
  ISAPRE  = 2

  PREVISION = {
    FONASA: FONASA,
    ISAPRE: ISAPRE
  }.freeze
end

再修改视图中的select代码:

<div class="form-group row"><label class="col-sm-2 col-form-label">Select</label>
   <div class="col-sm-10">
        <%= f.select(:prevision, Usuario::PREVISION.map { |name, id| [name.to_s, id] }, {prompt: 'Seleccionar tipo de previsión'}, {:class=>'form-control m-b',readonly: true ,required: true}) %>
   </div>
</div>

方案二:不修改模型,仅调整视图逻辑

如果需要保留模型中PREVISION的数组结构,直接在视图遍历的时候通过常量名获取对应数值即可:

<div class="form-group row"><label class="col-sm-2 col-form-label">Select</label>
   <div class="col-sm-10">
        <%= f.select(:prevision, Usuario::PREVISION.collect{ |u| [u.to_s, Usuario.const_get(u)] }, {prompt: 'Seleccionar tipo de previsión'}, {:class=>'form-control m-b',readonly: true ,required: true}) %>
   </div>
</div>
最终效果

修改后渲染的下拉选项代码如下,符合value设置为对应ID的需求:

<option value="1">FONASA</option>
<option value="2">ISAPRE</option>

内容的提问来源于stack exchange,提问作者Diego Muñoz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:09:02