Rails form_for选择框,其中包含来自db的已定义值视图值

时间:2013-08-15 12:05:15

标签: ruby-on-rails forms

我有这样的表格部分用于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将为空

1 个答案:

答案 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 => "Выбрать" }