1

对于 CRUD 操作,我有这样的部分形式:

= form_for @vehicle do |f|
    = f.select :fuel_type, [["Выбрать", "None"], "Бензин", "Дизель", "Газ", "Гибрид", "Электричество", "Другое"], {:required => true, :selected => @vehicle.fuel_type}

因此,正如您在 db 中看到的那样,我存储空词,例如 Бензин 或 Дизель 等...

但是当我尝试使用我的表单部分数据进行编辑时,我看到我的选择框的默认选择值是无(显示为Выбрать)。但是当在 db 中该字段是 Бензин 为什么它在表单视图中设置为 None ?如何看到Бензин?

另请注意,对于新操作,@vehicle.fuel_type 将为空

4

1 回答 1

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 => "Выбрать" } 
于 2013-08-15T12:13:07.027 回答