2016-03-22 3 views
15

Ich versuche, das rolify-Juwel einzurichten, und ich stoße auf ein Problem, das einem Benutzer in der Konsole eine Rolle zuweist.Rolify Tabellenfehler (user.add_role: admin unbekannter Schlüsselfehler)

Hier ist mein Fehler:

2.2.1 :007 > user.add_role :admin 
ArgumentError: Unknown key: :optional. 

ich laufen bin mit cancancan und rolify entwickeln. Ich betreibe auch das Juwel Koudoku, um Unterstützung bei der Bezahlung von Abonnements zu erhalten. Ich vermute, dass dieser Fehler durch die Tatsache verursacht wird, dass meine Tabelle "subscriptions" auch eine Spalte "user_id" enthält. Kann ich etwas tun, um dieses Problem zu beheben?

Hier ist mein Schema.

create_table "subscriptions", force: :cascade do |t| 
t.string "stripe_id" 
t.integer "plan_id" 
t.string "last_four" 
t.integer "coupon_id" 
t.string "card_type" 
t.float "current_price" 
t.integer "user_id" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
end 

create_table "users", force: :cascade do |t| 
t.string "email",     default: "", null: false 
t.string "encrypted_password",  default: "", null: false 
t.string "reset_password_token" 
t.datetime "reset_password_sent_at" 
t.datetime "remember_created_at" 
t.integer "sign_in_count",   default: 0, null: false 
t.datetime "current_sign_in_at" 
t.datetime "last_sign_in_at" 
t.string "current_sign_in_ip" 
t.string "last_sign_in_ip" 
t.datetime "created_at",       null: false 
t.datetime "updated_at",       null: false 
t.string "first_name" 
t.string "string" 
t.string "last_name" 
end 

add_index "users", ["email"], name: "index_users_on_email", unique: true 
add_index "users", ["reset_password_token"], name:  
"index_users_on_reset_password_token", unique: true 

create_table "users_roles", id: false, force: :cascade do |t| 
t.integer "user_id" 
t.integer "role_id" 
end 

add_index "users_roles", ["user_id", "role_id"], name: "index_users_roles_on_user_id_and_role_id" 

end 

Danke.

Antwort

39

Die Rolify Rolle Generator erzeugt Rollenmodell mit folgendem Code:

class Role < ActiveRecord::Base 


has_and_belongs_to_many :users, :join_table => :users_roles 

    belongs_to :resource, 
      :polymorphic => true, 
      :optional => true 

    validates :resource_type, 
      :inclusion => { :in => Rolify.resource_types }, 
      :allow_nil => true 

    scopify 
end 

:optional => true Der Parameter wird in Rails Version 5 und höher unterstützt. Um dieses Problem zu umgehen, löschen Sie einfach diese Zeile aus Ihrem Rollenmodell, und Sie sollten gut gehen. Unten ist der endgültige Code für Ihre Referenz:

class Role < ActiveRecord::Base 
    has_and_belongs_to_many :users, :join_table => :users_roles 

    belongs_to :resource, 
      :polymorphic => true 

    validates :resource_type, 
      :inclusion => { :in => Rolify.resource_types }, 
      :allow_nil => true 

    scopify 
end 
+0

Das hat funktioniert. Danke @pranavpr! –

+3

Danke! Es ist ein wirklich gutes Juwel, aber enttäuscht, dass diese Art der Sache nicht aus der Box heraus behandelt wird, besonders wenn man bedenkt, wie viele Apps die Rails-Version <5 verwenden – user2490003