Inside app/models/abc/xyz.rb
module Abc::Xyz
extend ActiveSupport::Concern
end
Inside app/models/abc.rb
class Abc < ActiveRecord::Base
include Abc::Xyz
end
When I try to fetch data from Abc.where(id: id) sometimes it works and sometimes it returns this error(TypeError: wrong argument type Class (expected Module)).
TypeError: wrong argument type Class (expected Module)
app/models/abc.rb:2:in `include'
app/models/abc.rb:2:in `<class:Abc>'
app/models/abc.rb:1:in `<top (required)>'
activesupport (3.2.17) lib/active_support/dependencies.rb:469:in `load'
activesupport (3.2.17) lib/active_support/dependencies.rb:469:in `block in load_file'
activesupport (3.2.17) lib/active_support/dependencies.rb:639:in `new_constants_in'
activesupport (3.2.17) lib/active_support/dependencies.rb:468:in `load_file'
activesupport (3.2.17) lib/active_support/dependencies.rb:353:in `require_or_load'
activesupport (3.2.17) lib/active_support/dependencies.rb:502:in `load_missing_constant'
activesupport (3.2.17) lib/active_support/dependencies.rb:192:in `block in const_missing'
activesupport (3.2.17) lib/active_support/dependencies.rb:190:in `each'
activesupport (3.2.17) lib/active_support/dependencies.rb:190:in `const_missing'
activesupport (3.2.17) lib/active_support/inflector/methods.rb:230:in `block in constantize'
activesupport (3.2.17) lib/active_support/inflector/methods.rb:229:in `each'
activesupport (3.2.17) lib/active_support/inflector/methods.rb:229:in `constantize'
activesupport (3.2.17) lib/active_support/core_ext/string/inflections.rb:54:in `constantize'
module Xyz
instead. Concerns are supposed to be shared among your models, it doesn't make sense to namespace them to an existing class. – ScherzoAbc
as amodule
andclass
are confusing.. to me and Rails too... – Varicoceleclass X ; end class Y include X end
---- The same error you will get.. – Varicoceleapp/modesl/Abc/xyz.rb
to becomeapp/modesl/abc/xyz.rb
– Vav