2017-09-29 6 views
1

Ich habe eine Benutzer Tabelle mit Ebenen der Berechtigung ... (Kunde/Hersteller/Admin) aber ich kann nicht scheinen, einen neuen Benutzer mit Standard auf 0 gesetzt, die "Kunde" der Fehler gleich wäre sagt "'0' ist kein gültiger Freigabebetrag?"Enum active record space_level Probleme

Hier ist mein Benutzermodell

class User < ApplicationRecord 
    include Clearance::User 
    validates :email, presence: true 
    validates :password, presence: true 
    validates :password, confirmation: { case_sensitive: true } 
    enum clearance_level: [:customer, :vendor, :admin] 
    end 

und dies ist meine Migrationsdatei ... (i die Spalte entfernt und wieder hinzugefügt einhüllen, dass es gelöst?)

class ChangeClColumns < ActiveRecord::Migration[5.1] 
    def change 
     remove_column :users, :clearance_level 
     add_column :users, :clearance_level, :integer, :default => 0 

    end 
    end 

Auch mein Schema

create_table "users", force: :cascade do |t| 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
t.string "email", null: false 
t.string "encrypted_password", limit: 128, null: false 
t.string "confirmation_token", limit: 128 
t.string "remember_token", limit: 128, null: false 
t.string "first_name" 
t.string "last_name" 
t.date "date_of_birth" 
t.integer "clearance_level", default: 0 
t.index ["email"], name: "index_users_on_email" 
t.index ["remember_token"], name: "index_users_on_remember_token" 

Ende

Antwort

2

Dies liegt daran, dass Sie eine Zeichenkette '0' speichern, keine Ganzzahl 0. Alles, was Sie von Ihren Parametern erhalten, ist eine Zeichenkette. Sie haben hier zwei Möglichkeiten: 1. konvertieren Sie es vor der Zuweisung in eine ganze Zahl. 2. Verwenden Sie den enum Namen und senden Sie "Kunde" von Ihrem Formular anstelle von "0". Beide werden erfolgreich gespeichert.