Rails中选择列表的默认选择选项

时间:2014-03-06 12:22:15

标签: ruby-on-rails html-select

以下是要检查的代码:

f.select :engine_type_id, options_for_select(association_select_items(EngineType), selected: f.object.engine_type.id)

这段代码效果很好,但是如果f.object.engine_type为nil(例如,正在创建对象时),我得到了nil:NilClass的错误“undefined method`id'”。我该如何解决?谢谢。

2 个答案:

答案 0 :(得分:0)

如果是新记录或者没有引擎类型,则无法执行.id因此错误。但假设它是belongs_to关联,它将有一个engine_type_id列。

所以做到这一点

selected: f.object.engine_type_id

或者如果使用form_for,它可以用于@car对象

selected: @car.engine_type_id

答案 1 :(得分:-1)

这不是有效的红宝石:

f.select :engine_type_id, options_for_select(association_select_items(EngineType), selected: f.object.engine_type.id)

这一部分 - selected: f.object.engine_type.id是键值对的javascript语法。 ruby等效语法是

:selected => f.object.engine_type.id

密钥可以是任何对象,但出于效率原因(以及约定),通常最好将符号用作键。 (:selected是符号)

所以整个事情就是

f.select :engine_type_id, options_for_select(association_select_items(EngineType), :selected => f.object.engine_type.id)

下一个问题,我认为(在你的rails版本中可能有所不同)是options_for_select帮助器期望默认值只是在选项数组后直接作为参数传递,即

f.select :engine_type_id, options_for_select(association_select_items(EngineType), f.object.engine_type.id) 

就像我说我不确定这最后一部分。无论如何,这就是我的rails版本的工作原理。