Rails 4 Enum Validierung

Dies ist das erste Mal, dass ich Enums mit Rails 4 verwende, und ich bin auf einige Probleme gestoßen, habe ein paar schmutzige Lösungen im Auge und wollte prüfen, ob es noch elegantere Lösungen gibt:

Dies ist mein für die Tabellenmigration relevanter Teil:

create_table :shippings do |t|
  t.column :status, :integer, default: 0
end

Mein Modell

class Shipping < ActiveRecord::Base
  enum status: { initial_status: 0, frozen: 1, processed: 2 }
end

Und ich habe dieses Bit aus meiner Sicht (mit einfachem Formular für):

= f.input :status, :as => :select, :collection => Shipping.statuses, :required => true, :prompt => 'Please select', label: false

Also in meinem Controller:

  def create
    @shipping = Shipping.create!(shipping_params)

    if @shipping.new_record?
      return render 'new'
    end

    flash[:success] = 'Shipping saved successfully'
    redirect_to home_path
  end

private

  def shipping_params
    params.require(:shipping).permit(... :status)
  end

Also, wenn ich ein Erstellungsformular abschicke und die Erstellungsaktion ausgelöst wird, wird dieser Überprüfungsfehler angezeigt:

'1' is not a valid status

Also dachte ich, ich wüsste, dass das Problem vom Datentyp ist, also habe ich dieses Bit im Modell hinzugefügt:

before_validation :set_status_type

  def set_status_type
    self.status = status.to_i
  end

Aber das schien nichts zu tun, wie löse ich das? Hat jemand die ähnliche Erfahrung gemacht?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage