2016-03-22 12 views
15

Sto tentando di impostare la gemma rolify e sto eseguendo un problema che assegna un ruolo a un utente nella console.Errore nella tabella di rollio (user.add_role: admin Errore chiave sconosciuto)

Ecco il mio errore:

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

Io corro elaborare con cancancan e rolify. Gestisco anche la gemma Koudoku per il supporto per il pagamento dell'abbonamento. Sospetto che questo errore possa essere causato dal fatto che la mia tabella "iscrizioni" ha anche una colonna "user_id". C'è qualcosa che posso fare per correggere questo problema?

Ecco il mio 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 

Grazie.

risposta

39

Il Rolify generatore ruolo genera modello con codice seguente:

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 

Il parametro :optional => true è supportato in Rails versione 5 e superiori. Per aggirare questo problema, elimina quella linea dal tuo modello di ruolo e dovresti essere pronto. Di seguito è il codice finale per il vostro riferimento:

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

Che ha funzionato. Grazie @pranavpr! –

+3

Grazie! È un vero gioiello, ma deluso dal fatto che questo genere di cose non è gestito dalla scatola, soprattutto considerando quante app usano la versione di Rails <5 – user2490003

Problemi correlati