【问题标题】:Rails update enum fields is not a validRails 更新枚举字段无效
【发布时间】:2017-09-28 16:14:16
【问题描述】:

我正在尝试更新表单,但在提交表单时出现以下错误。

“接受”不是有效状态

在我的 pdform.rb 模型中,我有这个枚举

enum status: { submitted: 0, approved: 1, rejected: 2 }

这是状态的输入。我尝试将第二个接受的值切换为枚举中的值,但是当我这样做时,我得到了这个错误。

<div class="form-group row">
    <%= form.label :status, class: 'col-2 col-form-label' %>
    <div class="col-md-5">
      <%= form.select(:status, options_for_select([['Accepted', 'accepted'], ['Declined', 'declined']]), { include_blank: true }) %>
    </div>
  </div>

“1”不是有效状态

在表单表的模式文件中,我将默认状态设置为 0,但是当我提交此表单时,它显示为 nil。我是否需要将状态切换为字符串并将默认设置为“已提交”?如何在不出现该错误的情况下更新此表单?

t.integer "status", default: 0

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您的选项值是接受、拒绝,枚举状态中未提及。

    所以,要么将它们添加到枚举中

    枚举状态:{已提交:0,已批准:1,已拒绝:2,已接受:3, 拒绝:4 }

    将表单选择选项更改为仅包含枚举中的值

      <%= form.select(:status, options_for_select([['Submitted',
     'submitted'],['Approved','approved'],['Rejected','rejected']]), {
     include_blank: true }) %>
    

    【讨论】:

    • @TrentonTyler 发生了。如果发现我的解决方案有用。点赞。谢谢你
    • enum 中添加accepteddeclined 选项是正确的。不过,其他合适的方法是enum status: [:submitted, :approved, :rejected, :accepted, :declined]enum 设置为数组会自动为其分配数组索引。您可以随时更改顺序。并改用form.select :status, Model.statuses.keys.map {|u| [u.titleize, u]}。我认为它更清洁。
    • @Aakanksha 是的,两种方式都可以。很高兴再次认识你。 :)
    猜你喜欢
    • 2014-06-21
    • 2015-06-29
    • 1970-01-01
    • 2013-01-28
    • 2016-05-08
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多