Guest User

Untitled

a guest
Apr 24th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. ##
  2. # excerpt from user.rb
  3.  
  4. # this is how roles is defined
  5. has_and_belongs_to_many :roles
  6.  
  7. # and this the has_role? function
  8. def has_role?(role)
  9. if role.is_a?(String)
  10. @@roles ||= {}
  11. @@roles[role] ||= Role.find_by_title(role)
  12. role = @@roles[role]
  13. end
  14. roles.include?(role) # this is the line of failure, but only when user.roles was not called before
  15. end
  16.  
  17. ##
  18. # console output
  19.  
  20. # when calling user.roles before calling has_role? it works fine
  21. >> u = User.find 1
  22. => #<User id: 1, login: "mk", ....>>>
  23. u.roles
  24. => [#<Role id: 2, title: "admin">, #<Role id: 5, title: "same-ip">, #<Role id: 4, title: "tester">, #<Role id: 3, title: "user">]
  25. >> u.has_role?('admin')
  26. => true
  27.  
  28. # but it crashes when not
  29. >> User.find(1).has_role?('admin')
  30. ActiveRecord::StatementInvalid: TypeError: wrong argument type Hash (expected String): conditions`roles`.`id` = 2sqlSELECT `roles`.id FROM `roles` INNER JOIN `roles_users` ON `roles`.id = `roles_users`.role_id WHERE (`roles`.`id` = 2) AND (`roles_users`.user_id = 1 ) LIMIT 1offsetselect`roles`.idlimit1
  31. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:151:in `log'
  32. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:299:in `execute'
  33. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:499:in `select'
  34. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `select_all_without_query_cache'
  35. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:55:in `select_all'
  36. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/base.rb:579:in `exists?'
  37. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:258:in `send'
  38. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:258:in `method_missing_without_paginate'
  39. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/base.rb:1806:in `with_scope'
  40. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:168:in `send'
  41. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:168:in `with_scope'
  42. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:254:in `method_missing_without_paginate'
  43. from /home/deploy/sauspiel-rails/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:164:in `method_missing'
  44. from /home/deploy/sauspiel-rails/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:218:in `include?'
  45. from /home/deploy/sauspiel-rails/app/models/user.rb:575:in `has_role?'
  46. from (irb):15
Add Comment
Please, Sign In to add comment