0

hier So ist das, was ich getan habe:Rails: Rolify gem die Datenbank nicht aktualisiert

Entsprechenden Benutzer auswählen:

>> user = User.find(337633) 
    User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 337633], ["LIMIT", 1]] 
#<User id: 337633, name: "Restaurant Guy", email: "[email protected]", mobile: "8000088888", image: "", password_digest: "$2a$10$H3TlQT1DdGOPQjSR7b1st.SVvAg5XiFidrfqzyqz0RW...", created_at: "2017-02-23 18:19:29", updated_at: "2017-02-23 18:21:43", uid: nil, provider: nil, verified_at: nil, location_id: nil> 

prüfen Anzahl der Rollen:

>> user.roles.length 
    Role Load (1.0ms) SELECT "roles".* FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1 [["user_id", 337633]] 
1 #customer role 

Erteilen Sie dem ausgewählten Benutzer ein Rolle einer bestimmten Ressource:

>> user.grant :restaurant_admin, Restaurant.first 
    Restaurant Load (1.0ms) SELECT "restaurants".* FROM "restaurants" ORDER BY "restaurants"."id" ASC LIMIT $1 [["LIMIT", 1]] 
    Role Load (0.0ms) SELECT "roles".* FROM "roles" WHERE "roles"."name" = $1 AND "roles"."resource_type" = $2 AND "roles"."resource_id" = $3 ORDER BY "roles"."id" ASC LIMIT $4 [["name", "restaurant_admin"], ["resource_type", "Restaurant"], ["resource_id", 1], ["LIMIT", 1]] 
    (1.0ms) BEGIN 
    (0.0ms) ROLLBACK 
    HABTM_Roles Load (0.0ms) SELECT "users_roles".* FROM "users_roles" WHERE "users_roles"."user_id" = $1 [["user_id", 337633]] 
    Role Load (0.0ms) SELECT "roles".* FROM "roles" WHERE "roles"."id" = $1 LIMIT $2 [["id", 4], ["LIMIT", 1]] 
#<Role id: nil, name: "restaurant_admin", resource_type: "Restaurant", resource_id: 1, created_at: nil, updated_at: nil> 
    Role Load (0.0ms) SELECT "roles".* FROM "roles" WHERE "roles"."id" = 4 
>> user.save 
    (0.0ms) BEGIN 
true 
    User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE "users"."mobile" = $1 AND ("users"."id" != $2) LIMIT $3 [["mobile", "8000088888"], ["id", 337633], ["LIMIT", 1]] 
    User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 AND ("users"."id" != $2) LIMIT $3 [["email", "[email protected]"], ["id", 337633], ["LIMIT", 1]] 
    (1.0ms) COMMIT 

Und es sparen:

>> user.save 
    (0.0ms) BEGIN 
true 
    User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE "users"."mobile" = $1 AND ("users"."id" != $2) LIMIT $3 [["mobile", "8000088888"], ["id", 337633], ["LIMIT", 1]] 
    User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 AND ("users"."id" != $2) LIMIT $3 [["email", "[email protected]"], ["id", 337633], ["LIMIT", 1]] 
    (1.0ms) COMMIT 

Reload aus Datenbank:

>> reload! 
Reloading... 
true 

Überprüfen Sie, ob der gespeicherte Wert vorhanden ist

>> user = User.find(337633) 
    User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 337633], ["LIMIT", 1]] 
#<User id: 337633, name: "Restaurant Guy", email: "[email protected]", mobile: "8000088888", image: "", password_digest: "$2a$10$H3TlQT1DdGOPQjSR7b1st.SVvAg5XiFidrfqzyqz0RW...", created_at: "2017-02-23 18:19:29", updated_at: "2017-02-23 18:21:43", uid: nil, provider: nil, verified_at: nil, location_id: nil> 
>> user.roles.length 
    Role Load (0.0ms) SELECT "roles".* FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1 [["user_id", 337633]] 
1 #customer role :(

Warum wurde nicht die Update beibehalten?

Was mache ich falsch?


UPDATE: Sieht aus wie es die aktualisierten Teile beim Speichern kein Fehler ist, aber scheint ein bug in rolify Juwel zu sein, wenn auf


UPDATE 2Rails 5+ betrieben: Die oben genannten Fehler wurde gelöst, glaube ich, und ich fand schließlich, was die ROLLBACK verursacht -> Fehler include resourcify.

+0

sollte ich auf die Rollen eine 'save' tun? etwas wie 'user.roles.save', um das Rollenarray zu aktualisieren? –

+0

Was macht der 'ROLLBACK', wenn ich die Rolle bewilligt habe? verursacht das den Fehler? –

Antwort

0

Need resourcify auf der Ressource enthält, das die Rolle zugewiesen werden soll, und die ROLLBACK vorging als die Verbindung unterbrochen wurde.

Und ich fand auch, dass user.save nutzlos ist hier wie die Rollen in die db Recht erhalten, nachdem Sie sie gewähren

0

Basierend auf diesen SO answer versuchen direkt reload auf das Benutzerobjekt zu nennen:

user.reload 

Es scheint, dass die Schienen Konsole nicht Klassen nicht neu geladen, sobald sie referenziert sind.

+0

'reload' hilft nicht! :(Rollen werden nicht aktualisiert.und könnte es der "ROLLBACK" sein, der das verursacht? –

+0

und BTW auch wenn "user" obj zwischengespeichert wird und nicht während 'reload!' Zurückgesetzt wird, sollte rails ** es von db ** auf meinem Befehl 'user = User.find (id)' _holen, was ich danach gemacht habe 'nachladen!' _ richtig? –

+0

wahr. Kannst du die "Grant" -Methode posten? – Flip

0

Wenn Sie dem ausgewählten Benutzer eine Rolle für eine bestimmte Ressource gewähren, scheint es, dass kein Datensatz zu users_roles hinzugefügt wurde.

>> user.grant :restaurant_admin, Restaurant.first 
    Restaurant Load (1.0ms) SELECT "restaurants".* FROM "restaurants" ORDER BY "restaurants"."id" ASC LIMIT $1 [["LIMIT", 1]] 
    Role Load (0.0ms) SELECT "roles".* FROM "roles" WHERE "roles"."name" = $1 AND "roles"."resource_type" = $2 AND "roles"."resource_id" = $3 ORDER BY "roles"."id" ASC LIMIT $4 [["name", "restaurant_admin"], ["resource_type", "Restaurant"], ["resource_id", 1], ["LIMIT", 1]] 
    (1.0ms) BEGIN 
    (0.0ms) ROLLBACK 
    HABTM_Roles Load (0.0ms) SELECT "users_roles".* FROM "users_roles" WHERE "users_roles"."user_id" = $1 [["user_id", 337633]] 
    Role Load (0.0ms) SELECT "roles".* FROM "roles" WHERE "roles"."id" = $1 LIMIT $2 [["id", 4], ["LIMIT", 1]] 
#<Role id: nil, name: "restaurant_admin", resource_type: "Restaurant", resource_id: 1, created_at: nil, updated_at: nil> 
    Role Load (0.0ms) SELECT "roles".* FROM "roles" WHERE "roles"."id" = 4 
>> user.save 
    (0.0ms) BEGIN 
true 
    User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE "users"."mobile" = $1 AND ("users"."id" != $2) LIMIT $3 [["mobile", "8000088888"], ["id", 337633], ["LIMIT", 1]] 
    User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 AND ("users"."id" != $2) LIMIT $3 [["email", "[email protected]"], ["id", 337633], ["LIMIT", 1]] 
    (1.0ms) COMMIT 

es war ROLLBACKed. so denke ich, es ist etwas falsch mit der Methode user#grant

+0

, also vielleicht ein ** großer ** Fehler im Edelstein 'rolify'? –

+0

Ich glaube nicht, dass es kein Fehler ist, aber Sie sollten überprüfen, ob dies einen Wert zurückgibt, der nicht 'Role.Role.where (name:' restaurant_admin ', resource_type:' Restaurant ', resource_id: 1)' – silentfox

+0

ist keine solche Eingabe **, bis ich 'resourcify' ** hinzugefügt habe und dann einen' grant' Befehl ausgeführt habe; Es ist ein Fehler in einer Weise, dass es nicht den Fehler _that 'resourcify' zeigt, fehlt _ oder zu sagen, dass das rel gebrochen ist –

Verwandte Themen