From: Josh Cheek on 30 Mar 2010 09:15 [Note: parts of this message were removed to make it a legal post.] On Tue, Mar 30, 2010 at 5:47 AM, Benoit Molenda <devanth(a)gmail.com> wrote: > Brian Candler wrote: > > Benoit Molenda wrote: > >> Josh Cheek wrote: > >>> Classes and modules are constants, so their names need to begin with > >>> Uppercase Letters. > >> > >> Yes, sorry for my exemple, my real code follow of course the naming > >> style. > > > > So show a real piece of Ruby code which replicates the problem - > > something we can paste into a file and run for ourselves. > > > > Often, in boiling down a problem into a simple test case like that, > > you'll discover what the problem is. And if you don't, you will have > > made it much easier for others to determine what the problem is. > Sure. > > I create a test app with this code. > In app/controller/local/class_generator_controller.rb : > > class Local::VerticalGeneratorController < ApplicationController > def index > @models = VerticalBuilder::Vertical.list > @models = VerticalBuilder::Vertical.list #second call raise an > exception > end > end > > In lib/local/vertical_builder/vertical.rb : > module Local > module VerticalBuilder > class Vertical > def self.list > [] > end > end > end > end > > I get the same error when I call > http://localhost:3000/local/vertical_generator : > Local is not missing constant VerticalBuilder! > It seams that Ruby try to load each time the Constant instead of look > into already loaded... > -- > Posted via http://www.ruby-forum.com/. > > I think this is going to be a Rails question about how Rails handles loading files / environments. But a few thoughts to look at: What happens if you say Local::VerticalBuilder::Vertical.list ? What happens if you run your server in production mode? What happens if you place the code into an initializer instead of lib?
From: Benoit Molenda on 30 Mar 2010 09:47 Josh Cheek wrote: > But a few thoughts to look at: > What happens if you say Local::VerticalBuilder::Vertical.list ? It Works ! But I really would like to know why. My class is called Local::Class name, so it belongs to the module Local and must be able to access to all submodules, isn't it ? The strangest thing is that without this Local:: the call work once only like I said. Really strange ... Anyway, thanks for help. I can continue my project with this now. If anyone get info about this freaky trick I would like to see the light of truth :p -- Posted via http://www.ruby-forum.com/.
From: Brian Candler on 30 Mar 2010 10:44 > I create a test app with this code. > In app/controller/local/class_generator_controller.rb : > > class Local::VerticalGeneratorController < ApplicationController > def index > @models = VerticalBuilder::Vertical.list > @models = VerticalBuilder::Vertical.list #second call raise an > exception > end > end Try rewriting this as: module Local class VerticalGeneratorController < ApplicationController ... end end I have seen similar constant lookup problems before. $ irb --simple-prompt >> class Foo >> ZZZ = 123 >> end => 123 >> class Foo::Bar >> def baz >> puts ZZZ >> end >> end => nil >> Foo::Bar.new.baz NameError: uninitialized constant Foo::Bar::ZZZ from (irb):6:in `baz' from (irb):9 from :0 Compare: $ irb --simple-prompt >> class Foo >> ZZZ = 123 >> end => 123 >> class Foo >> class Bar >> def baz >> puts ZZZ >> end >> end >> end => nil >> Foo::Bar.new.baz 123 => nil -- Posted via http://www.ruby-forum.com/.
First
|
Prev
|
Pages: 1 2 Prev: Ruby web service. Next: Are you struggling to understand Business Concepts? |