【问题标题】:rails + simpleform: selected does not set to be enum's valuerails + 简单形式:选择不设置为枚举的值
【发布时间】:2026-02-09 15:15:02
【问题描述】:

我的用户模型有一个枚举定义。

class User < ActiveRecord::Base
  enum program_of_study: [
    :program_of_study_unknown, :program_of_study_cs, :program_of_study_ceg,
    :program_of_study_is, :program_of_study_science,
    :program_of_study_engineering, :program_of_study_fass,
    :program_of_study_business, :program_of_study_others
  ]
end

在 simple_form 中我有:

<%= simple_form_for(locals[:user], wrapper: :horizontal_form, html: {class: 'form-horizontal'},
                    url: {action: (locals[:is_new] ? 'create' : 'update')}) do |f| %>
    <%= f.error_notification %>
    <%= f.input :program_of_study, collection: User.program_of_studies, include_blank: false, selected: locals[:user].program_of_study %>
    <%= f.button :submit, class: 'btn-success' %>
<% end %>

但是,似乎虽然用户的program_of_study'program_of_study_science'(通过在rails 控制台中检查),但当我呈现表单时,显示的选择元素仍然具有'program_of_study_unknown' 作为显示的元素。没有选择正确的。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 enums simple-form


    【解决方案1】:

    我使用了密钥而不是枚举,它似乎可以工作,你有没有尝试过:

    collection: User.program_of_studies.keys
    

    我不必指定selected 选项。我的代码如下所示:

    input :status, as: :select, collection: Venue.statuses.keys, include_blank: false
    

    【讨论】:

    • 所以如果我没有弄错的话,发布的“价值”会是“program_of_study_cs”之类的东西吗?
    • 是的,枚举的工作方式应该有效。你试过了吗?
    【解决方案2】:

    我的最终解决方案

    <%= f.input :program_of_study, collection: User.program_of_studies, include_blank: false, selected: User.program_of_studies[locals[:user].program_of_study] %>
    

    【讨论】: