我如何预先 select 已为 SimpleForm 中的现有对象编辑 select 的值?

How do I pre-select the value that has been selected for an existing object in SimpleForm?

我正在使用 SimpleForm,我的输入如下所示:

<%= f.input_field :language, collection: Rouge::Lexer.all.map(&:tag).sort, as: :select, selected: "ruby", class: "form-control" %>

存储这样的对象:

[60] pry(main)> q.language
=> "ruby"
[64] pry(main)> w.language
=> "csharp"

这适用于新问题,因为它自动 selects "ruby" 这很好。

但是,当用户去编辑记录时,我希望这个字段预先select存储在这个对象中的语言。

所以对于上面的对象 q,它应该在 select "ruby" 之前,但是对于 w 对象它应该在 select "csharp".

假设 language 是字符串而不是 ID,并且我想要 new 个实例的默认值,我该怎么做?

你可以说:

selected: @question.language || 'ruby'

它会首先检查模型上是否存在属性,如果不存在则默认为'ruby'

如果您想将此逻辑移出模板,一些不错的候选位置是模型、演示者或 form object