How to use ‘constantize’ in custom contr oller module

I have a module like this:

module Controller
module LocaleModels
def self.included(base)
base.send :include, InstanceMethods
end

module InstanceMethods
  def locale_Lexeme; constantize_model('Lexeme') end
  def locale_Synthetic; constantize_model('Synthetic') end
  def locale_Property; constantize_model('Property') end

  private
  def constantize_model(common_part)
    eval(I18n.locale.capitalize + '::' + common_part).constantize
  end
end

end
end

But I kept getting

NoMethodError (undefined method `constantize’ for #Class:0x2483b0c)

I guess I cannot use ‘constantize’ in a custom module.

But can you please offer some workaround?

Hello–
On Aug 9, 2009, at 9:39 AM, boblu wrote:

 def locale_Lexeme; constantize_model('Lexeme') end

But I kept getting

NoMethodError (undefined method `constantize’ for #Class:0x2483b0c)

I guess I cannot use ‘constantize’ in a custom module.

But can you please offer some workaround?

This may not be the problem, but why are you using eval?
ActiveSupport::CoreExtensions::String::Inflections defines constantize
as a method on String. It would seem to me that this would work:

(I18n.locale.capitalize + ‘::’ + common_part).constantize

However, if you are looking for a class, investigate classify instead.

Maybe there’s something I’m missing here that requires use of eval?
What happens in script/console if you type the expression in?

Thank you for your reply.

Actually, that eval is a typo. But I found by removing that ‘eval’ did
resolved my problem here.

Thank you very much.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs