以下是要检查的代码:
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'”。我该如何解决?谢谢。
答案 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版本的工作原理。