Rails Simple Form单选按钮集合问题求助:显示值与存储值不一致
解决Simple Form中单选按钮集合显示文本与存储值不一致的问题
我懂你遇到的困扰了——想让单选按钮给用户展示易懂的文本,但把对应的数值存到shower_flow_rate字段里对吧?你的思路完全没问题,只是collection_radio_buttons的参数顺序搞错了,导致没法正常工作。
修正后的代码
<%= f.collection_radio_buttons :shower_flow_rate, [[2.5, 'Yes'], [3.8, 'Some'], [5.0, 'No']], :first, :last, prompt: "Do you have low flow shower heads?" %>
参数拆解说明
我给你理清楚每个部分的作用,方便以后复用:
:shower_flow_rate:绑定的模型字段,这个你没写错,就是要存储值的目标属性[[2.5, 'Yes'], [3.8, 'Some'], [5.0, 'No']]:你的选项集合,每个数组元素的第一个值是要存到数据库的内容,第二个是给用户看的友好文本,这个结构完全正确:first:告诉Simple Form,用每个选项数组的第一个元素作为提交给服务器的数值(也就是最终存在shower_flow_rate里的2.5/3.8/5.0):last:告诉Simple Form,用每个选项数组的第二个元素作为显示给用户的文本(Yes/Some/No)prompt: ...:这个配置项要放在最后,用来生成一个默认的提示选项,之前你把它放在了集合参数前面,位置不对才导致功能异常
进阶:自定义单选按钮样式
如果需要调整排版或者适配框架样式(比如Bootstrap),可以用块写法自定义结构:
<%= f.collection_radio_buttons :shower_flow_rate, [[2.5, 'Yes'], [3.8, 'Some'], [5.0, 'No']], :first, :last, prompt: "Do you have low flow shower heads?", item_wrapper_class: 'form-check' do |b| b.label(class: 'form-check-label') { b.radio_button(class: 'form-check-input') + b.text } end %>
这样既能保留「显示文本和存储值不一致」的核心需求,又能生成符合前端样式规范的单选按钮组。
内容的提问来源于stack exchange,提问作者ezweizig
相关产品推荐
相关产品推荐

