I like it, routing via :modules is very elegant. It works for me in a normal rails application, but i can't get it work inside of a rails engine.
config/routes.rb from the engine:
Wobauth::Engine.routes.draw do resources :users do resources :authorities, module: :users end end
Controllers:
module Wobauth
class Users::AuthoritiesController < AuthoritiesController ...
end
end
module Wobauth class AuthoritiesController < ApplicationController ... end end
I get the following error:
uninitialized constant Authority
Extracted source (around line #269):
names.inject(Object) do |constant, name|
if constant == Object
constant.const_get(name)
else
candidate = constant.const_get(name)
next candidate if constant.const_defined?(name, false)
It works without specifying :modules, but this means i must place the logic in the main authorities_controller ... so its less elegant. Any idea?
Wolfgang.
Yeah, found it. The problem comes from cancancan/lib/cancan/controller_resource.rb in
def resource_class
case @options[:class]
when false
name.to_sym
when nil
namespaced_name.to_s.camelize.constantize
when String
@options[:class].constantize
else
@options[:class]
end
end
The error cames from namespaced_name.to_s.camelize.constantize, which resolves to "Authority". I now set
module Wobauth class AuthoritiesController < ApplicationController skip_load_and_authorize_resource
load_and_authorize_resource class: Wobauth::Authority ...
This sets the class name manually. Seems to work now. Thank you for the idea ;-)
def set_tags_from_input return if self.tag_list_input.nil? ... end