我有这样的表格部分用于CRUD操作:
= form_for @vehicle do |f|
= f.select :fuel_type, [["Выбрать", "None"], "Бензин", "Дизель", "Газ", "Гибрид", "Электричество", "Другое"], {:required => true, :selected => @vehicle.fuel_type}
因此,您可以在db i中看到存储孔字,例如Бензин或Дизель等...
但是当我尝试使用我的表单部分编辑一些数据时,我看到我的选择框的默认选择值是None(显示为Выбрать)。但是在db中,该字段是Бензин,为什么在表单视图中将其设置为None?怎么看Бензин?
另请注意,对于新动作,@ vehicle.fuel_type将为空
答案 0 :(得分:1)
我会将标签与值配对,并将值作为整数存储在数据库中:
[['Бензин', 1], ['Дизель', 2], ['Газ', 3]]
您可以在集合中添加空白以选择无:
f.select :fuel_type, [['Бензин', 1], ['Дизель', 2], ['Газ', 3], ...], { :include_blank => "Выбрать" }
通过这种方式,您的编辑表单上不需要:selected => @vehicle.fuel_type
,因为如果选择了该值,将从模型中填充该值。
可能有更好的方法来处理它,这个功能也可以在模型中完成,但要显示保存的值,你可以创建一个帮助方法:
def map_fuel_type(value)
case value
when 1
'Бензин'
when 2
'Дизель'
when 3
'Газ'
when 4
'Гибрид'
when 5
'Электричество'
when 6
'Другое'
end
end
然后在索引或显示页面上显示值:
<%= map_fuel_type @vehicle.fuel_type %>
以字符串形式存储:
f.select :fuel_type, ["Бензин", "Дизель", "Газ", "Гибрид", "Электричество", "Другое"], { :include_blank => "Выбрать" }