I''m looking to define dynamic classes, and in order to get them to play nicely with Rails I need them to behaving like a constantly defiend class. foo = Class.new Won''t work AFAIK because foo.class == Class If the new class is defined to a constant however it will work. Foo = Class.new So far the only way I know of to do this is to use eval. newclass = eval("Foo#{some_string} = Class.new") and then I can define new class as I see fit. However I do not want to use eval if I can help it. Can anyone make any suggestions? -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Mar 25, 3:44 pm, PsiPro <arjes...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I''m looking to define dynamic classes, and in order to get them to > play nicely with Rails I need them to behaving like a constantly > defiend class. > > foo = Class.new > > Won''t work AFAIK because > > foo.class == ClassWell that should always be true - classes should be instances of class. You do end up with foo.name == nil which I have seen confusing bits of rails> > If the new class is defined to a constant however it will work. > > Foo = Class.new > > So far the only way I know of to do this is to use eval. > > newclass = eval("Foo#{some_string} = Class.new") > > and then I can define new class as I see fit. However I do not want to > use eval if I can help it. Can anyone make any suggestions?Try const_set Fred -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 25 March 2011 15:44, PsiPro <arjesins-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I''m looking to define dynamic classes, and in order to get them to > play nicely with Rails I need them to behaving like a constantly > defiend class. > > and then I can define new class as I see fit. However I do not want to > use eval if I can help it. Can anyone make any suggestions?Can you explain the problem you''re facing that''s lead you to determine that dynamic classes are the solution? It may be that people could suggest alternate solutions that might not depend on the same functionality... -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
> Can you explain the problem you''re facing that''s lead you to determine > that dynamic classes are the solution? > It may be that people could suggest alternate solutions that might not > depend on the same functionality...I currently have a table-less model that is a SearchModel, it has attributes that correspond to MetaSearch parameters. The model also has a to_where_hash option so convert itself into the appropaite hash fields. I chose this path because I can use the rails associations + formtastic to generate the search forms on the fly based on the SearchModel attributes. This part isn''t hard and works well. So now, instead of writing specifically defining a class for each model I want to create a search form for, I want to create a GenericSearchObject that will build a specific search object using the association reflections and public attributes. example: Foo = Class.new(ActiveRecord::Base) do def self.columns() @columns ||= []; end def self.column(name, sql_type = nil, default = nil, null = true) columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null) end end Foo.class_eval do has_many :bar_ids_in, :class_name => ''Bar'' end Foo.reflect_on_all_associations now indicates there is a this creates a new foo class, and defines the association so formtastic will play nice(r) with it. Now here is why I want a dynamic constant.... When formtastic generates its fields it reflects on the classes as well, by using "instance.class". If i do not use the constant Foo, and instead using the variable foo, the class returned will be Class, instead of Foo. By dynamically generating these (unique) constant names, the instances will properly reflect on itself. I may be making my life overly complicated, but all of my irb tests show this method working. When I''m done with this training I will try to implement it unless anyone has any suggestions. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.