Hello! I know three years have passed, but I am looking to do exactly what you proposed on your first post, so I am interested in knowing if you have managed to so and if you did, how did you do it?
Thanks in advance. quinta-feira, 4 de Abril de 2013 às 05:24:18 UTC-4, Johan Vauhkonen escreveu: > > That kind of scenario was what I had initially in mind. Everyone has > the same models, just not the same database. > > 2013/4/4, Simon Macneall <[email protected] <javascript:>>: > > We have toyed with creating separate databases for each customer as our > > combined one is starting to get quite large. In our case, the models > will > > always be the same no matter which database you are connecting to, so > > there isn't any meta-programming involved. It's just a case of switching > > databases to the correct one for that customer once they log into the > > system. > > > > One thing to consider is that shared data needs to go somewhere > (sessions, > > > > username/passwords etc) as well. > > > > Cheers > > Simon > > > > > > > > > > > > On Thu, 04 Apr 2013 16:34:21 +0800, Julian Leviston > > <[email protected] <javascript:>> wrote: > > > >> Okay... > >> > >> So to do this, you need to understand meta-programming to a degree > >> because that's what you're doing. > >> > >> In normal Rails, you'd create a model as part of the development > >> process, but what you're doing is creating some code that creates > models > >> > >> itself (ie one level of abstraction higher than normal). > >> > >> The equivalent straight ruby comparison is: (compare 1, with 2, below): > >> > >> 1. Creating a class (this is normal programming) > >> > >> class Cat > >> def hi > >> puts 'meow' > >> end > >> end > >> > >> You can then create new Cat objects like this: > >> furrycat = Cat.new > >> > >> and make it meow like this: > >> furrycat.hi > >> > >> 2. Creating a piece of code that creates a class (this is > >> meta-programming) > >> > >> a_class = Class.new > >> hi_method_block = Proc.new{ puts 'meow' } > >> a_class.send(:define_method, :hi, &hi_method_block) > >> > >> You can then create new "Cat" objects like this: > >> furrycat = a_class.new > >> > >> and make it meow like this: > >> furrycat.hi > >> > >> --- > >> > >> So... assuming you followed that, then you'll understand that you > could > >> > >> do the same thing with ActiveRecord::Base classes, which is what forms > >> the bases for Active Record model classes. This is how you'd > dynamically > >> > >> LOAD one of your programmatically generated models. Creating the table > >> is just a matter of executing some arbitrary SQL which can be built > >> using ActiveRecord::Base.connection.execute. (Eg to run a count of a > >> fictitious users table, you'd do this: > >> ActiveRecord::Base.connection.execute("SELECT COUNT(*) FROM users;") > >> > >> However, like I said, there's no point trying to do this until you can > >> walk, because this really is running. Most Rails devs hardly ever get > >> into this stuff. I've been a Rails developer since 2005, and I've only > >> done this sort of dynamic table and database thing once or twice in > >> practice. > >> > >> Julian > >> > >> On 04/04/2013, at 6:43 PM, Johan Vauhkonen <[email protected] > <javascript:>> > >> wrote: > >> > >>> Thanks for posting, I appreciate the feedback. > >>> > >>> I'll start with keeping everything within a single database and take > it > >>> > >>> from there. > >>> > >>> You are right Julian in that I am new with RoR and what I've asked for > >>> is advanced. > >>> > >>> I'm still curious though how creating databases dynamically would be > >>> done so if it's explained anywhere I'd love to read it! > >>> > >>> > >>> 2013/4/4 Julian Leviston <[email protected] <javascript:>> > >>> > >>> On 04/04/2013, at 6:05 PM, Johan Vauhkonen <[email protected] > <javascript:>> > >>> wrote: > >>> > >>> > Thanks for replying, Julian. > >>> > > >>> > Can you point me to any resources that describe how to do it? > >>> > > >>> > I agree that I should not optimize prematurely but what I'm > >>> considering is which is easier, > >>> > to go with dynamically creating databases from the start or to > >>> extract data from the single database to new databases later on? > >>> > > >>> > It's at least something to keep in the back of my mind. > >>> > >>> Hi, > >>> > >>> You shouldn't attempt to do this if you don't already understand > enough > >>> > >>> Ruby / Rails to do it yourself. > >>> > >>> So, I suggest sticking with what you *can* do first. > >>> > >>> This might sound like a cop out, but there's very good reason. It's > >>> very advanced Rails and you really shouldn't attempt something like > >>> this until you understand the basics really well IMHO. > >>> > >>> Julian > >>> > >>> -- > >>> You received this message because you are subscribed to a topic in the > >>> Google Groups "Ruby on Rails: Talk" group. > >>> To unsubscribe from this topic, visit > >>> > https://groups.google.com/d/topic/rubyonrails-talk/S73DxPeqvy4/unsubscribe?hl=en-US. > > > >>> To unsubscribe from this group and all its topics, send an email to > >>> [email protected] <javascript:>. > >>> To post to this group, send email to [email protected] > <javascript:>. > >>> For more options, visit https://groups.google.com/groups/opt_out. > >>> > >>> > >>> > >>> > >>> -- > >>> You received this message because you are subscribed to the Google > >>> Groups "Ruby on Rails: Talk" group. > >>> To unsubscribe from this group and stop receiving emails from it, send > >>> an email to [email protected] <javascript:>. > >>> To post to this group, send email to [email protected] > <javascript:>. > >>> For more options, visit https://groups.google.com/groups/opt_out. > >>> > >>> > > > > -- > > You received this message because you are subscribed to a topic in the > > Google Groups "Ruby on Rails: Talk" group. > > To unsubscribe from this topic, visit > > > https://groups.google.com/d/topic/rubyonrails-talk/S73DxPeqvy4/unsubscribe?hl=en-US. > > > > To unsubscribe from this group and all its topics, send an email to > > [email protected] <javascript:>. > > To post to this group, send email to [email protected] > <javascript:>. > > For more options, visit https://groups.google.com/groups/opt_out. > > > > > > > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/07db2e5d-43e4-40b0-a520-11c00ff44877%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

