В рельсах3: irb (основной): 007: 0> h = {a: 1, b: '2', c: 6} => {: a => 1,: b => "2",: c => 6} irb (основной): 008: 0> h.keys => [: a,: b,: c] irb (основной): 009: 0> h.keys.include?'b' => false irb (main): 010: 0> h.keys.include?: b => true
Решение: Как плагин авторизации проверяет Object.constants.include?«LOGIN_REQUIRED_REDIRECTION», но в rails3 Object.constants возвращает массив символов, т.е. [: Object,: Module,: Class,: Kernel,: LOGIN_REQUIRED_REDIRECTION,: PERMISSION_DENIED_REDIRECTION, ...], в то время как ранее он возвращал массив строк. Таким образом, Object.constants.включают?«LOGIN_REQUIRED_REDIRECTION» возвращает false, даже если константа присутствует
Чтобы избежать этого и сделать константы плагинов авторизации совместимыми с rails3, нам нужно добавить константы приложения в файл config / application.rb и изменить константу в строке насимвол, т.е. сделать следующие изменения в rails-authorization-plugin / lib / authorization.rb
Изменить, если не Object.constants.include?«LOGIN_REQUIRED_REDIRECTION», если не Object.constants.include?: LOGIN_REQUIRED_REDIRECTION
Изменить, если не Object.constants.include?"PERMISSION_DENIED_REDIRECTION", если не Object.constants.include?: PERMISSION_DENIED_REDIRECTION
Изменить, если не Object.constants.include?"STORE_LOCATION_METHOD", если не Object.constants.include?: STORE_LOCATION_METHOD