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

