枚举的 ArgumentError ( is not a valid )

时间:2021-07-11 07:56:00

标签: ruby-on-rails ruby

概述

使用枚举创建表单(复选框)时,

ArgumentError ('1' is not a valid brake):

发生错误

此列只接受整数,拒绝'1'(字符串) 请告诉我如何将字符串转换为整数。

如果您能将专家的智慧借给我们,我们将不胜感激。

导轨'6.0.3'

调试

跳过表单时param的内容(也有字符串“1”...)

(byebug) params
<ActionController::Parameters {"authenticity_token"=>"...", "brake"=>"1", "controller"=>"download", "action"=>"confirm"} permitted: false>

代码

下载.rb

class Download < ApplicationRecord
    enum brake: {on: 1, off: 0}, _prefix: true
end

download_controller.rb

class download_controller < ApplicationController

    SESSION_KEY_FOR_DOWNLOAD = :download

    def new
        @download = ::Download.new
    end

    def confirm
        parameters = download_params
        @download = ::Download.new(parameters)
        session[SESSION_KEY_FOR_DOWNLOAD] = parameters
    end

    def create
        @download = ::Download.new(session[SESSION_KEY_FOR_DOWNLOAD])
        @download.save
        session[SESSION_KEY_FOR_DOWNLOAD] = nil
        redirect_to root_url
    end


    def download_params
        params.permit(:brake )
    end

end

new.html.erb

<%= form_with url: confirm_download_path(@download), local: true do |f| %>
  <fieldset class="form_check-block">
    <label>
      <%= f.check_box :brake, checked: @download&.brake_on? %>
      <%= f.label " ", class: "top_left" %>
    </label>
  </fieldset>
  <span>brake</span>
  <button>register</button>
<% end %>

shema.rb

  create_table "download", force: :cascade do |t|
    t.integer "brake", limit: 1, default: 1, null: false
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end

2 个答案:

答案 0 :(得分:1)

您使用带有枚举的复选框(只有两种状态)这一事实可能会突出设计缺陷。 您应该考虑以下更改:

  • 保留复选框并为 brake 属性使用布尔列
  • 使用选择字段并保留 brake 枚举(如果您计划拥有更多状态)

如果要保留复选框和枚举,则需要按名称而不是按值引用 brake 的可能值

f.check_box :brake, { checked: @download&.brake_on? }, :on, :off

答案 1 :(得分:0)

<%= f.check_box :brake, checked: @download&.brake_on? %>
↓
<%= f.check_box :brake, { checked: @download&.brake_on? }, :on, :off %>
相关问题