我如何预先 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。
我正在使用 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。