Rails表单中如何正确获取gender单选按钮的存储值?
解决Rails单选按钮存储值异常的问题
嘿,问题出在你写单选按钮的方式上!Rails的radio_button helper方法的参数格式用错啦,导致把哈希对象存进数据库了,而不是你想要的字符串值。
问题原因
你现在的写法是:
= f.radio_button :gender, :value => "De Heer" = f.radio_button :gender, :value => "Mevrouw"
这里的第二个参数你传了一个哈希{:value => "De Heer"},但实际上radio_button的第二个参数直接就是你要提交的选项值,第三个参数才是用来设置checked状态、class这类的选项哈希。所以你相当于把整个哈希当成了gender字段的值存进了数据库,这就是为什么读取时得到的是{:value=>"De Heer"}。
修正后的代码
把单选按钮的写法改成这样就对了:
= form_for @invoice_address do |f| .table-responsive %table.table %tbody %tr %td = f.radio_button :gender, "De Heer" = f.label :gender, "De Heer", value: "De Heer" # 建议加上label,点击文字也能选中单选框,提升体验 %td = f.radio_button :gender, "Mevrouw" = f.label :gender, "Mevrouw", value: "Mevrouw"
这样提交表单时,gender字段就会存储"De Heer"或者"Mevrouw"这两个字符串,之后你用%td= @invoice_address.gender就能拿到正确的值了。
额外处理:清理已有错误数据
如果数据库里已经存了那些哈希格式的错误数据,你可以在Rails控制台里执行以下命令批量修正:
# 修正De Heer的错误记录 InvoiceAddress.where(gender: { value: "De Heer" }).update_all(gender: "De Heer") # 修正Mevrouw的错误记录 InvoiceAddress.where(gender: { value: "Mevrouw" }).update_all(gender: "Mevrouw")
内容的提问来源于stack exchange,提问作者Jakeroo
相关产品推荐
相关产品推荐

