Generate model from database

hello i want to ask, how to generate model from table in my database. That's possibel ?

If you have a table widgets then all you need for the model is a file models/widget.rb containing

class Widget < ActiveRecord::Base end

Rails will do the rest.

Colin

@colin : i haven't understand, can you explain how to make it. may be script for generate it like if i want generate controller (ruby script/generate ...)

Please don't top post, it makes it difficult to follow the thread, insert your reply at appropriate points in previous message. Thanks.

@colin : i haven't understand, can you explain how to make it. may be script for generate it like if i want generate controller (ruby script/generate ...)

Can you explain exactly what it is you are trying to generate. You said that you wanted the model, is it actually the complete scaffold that you want?

I think you can use the scaffold generator and pass it the option --skip-migration to stop it making a migration to create the database, but you still have to pass the fields you are interested in. I have never done this however.

explains how to use the scaffold generator.

Colin

yes i want to generate model, but the table has been created in databases. And i want generate that table :slight_smile:

I asked last time that you don't top post, it makes it difficult to follow the thread, insert your reply at appropriate points in previous message. This time you have not even quoted the previous message so anyone reading this will have not idea what you are talking about without looking back through the thread.

You say that you want to generate just the model, so you do not want to generate the full scaffold. As I said previously there is no need to "generate" the model, just create a file models/your_model.rb with the class definition in as I showed in my first reply. Rails will automatically pick up the fields from the database at run time.

I think you might benefit from reading through the Rails Guides and from working through some tutorials. railstutorial.org is good and free to use online. Make sure that you have the version of rails to match the tutorial you are using.

Colin

Thanks colin, for your advice :slight_smile: and your coment

Colin Law wrote in post #1027233:

This is a problem I am also facing - trying to set up a rails app with a legacy database. The minimal model file Colin suggests works fine for access to the database, but I would love it if the scaffold (view, controller, ...) files could be generated as if all the table fields were explicitly used in the generate scaffold command. I know I would still need to modify them, but I would rather not have to add all the fields for all the tables into the various view files. I have found Dr. Nic's magic_model_generator gem, and if I can get it to do what I need with rails 2, which I am still not clear about, then I'll have to see if I can modify it to work with rails 3. Can anybody suggest anything else that will generate a more complete (as in using the fields from the database) set of view and other files?

Can you just get a list of the columns in that table, then generate the scaffold normally, using those fields as the parameters to the call, then delete the migration file?

I believe you can also pass a “–skip-migration” option to scaffold so it won’t generate the migration.

The whole point is I have lots of tables with lots of columns, and I don’t want to have to do all that typing. The magic_model_generator creates all the model files, and it can obviously see all the columns in the database, I’m just surprised that nobody has extended it or created something else to automatically fill in the view files. (And I do use the --skip-migration option as suggested in the other response.)

I looked for this same answer a while back and determined it was silly to do such - mainly because the only way around it IS to build everything by hand.

rails g scaffold TableName --skip-migration field:string field2:string field3:string field4:boolean

That's going to be the only way around it. And you may have to explicitly define the table name if it doesn't match rails naming structures. Any way you spin it, you're going to have to redesign forms for the data anyway.

Check into the formtastic gem - it might aid you in building forms from scratch. I believe there's a Railscast on it as well.

Well you don’t exactly have to do it by hand. It’s pretty easy to write a script to generate the command for you. Just change table_name to whatever your model is…

table_name = “Post”

output = [ “rails g scaffold #{table_name} --skip-migration” ]

ignore_columns = [ ‘id’, ‘created_at’, ‘updated_at’ ]

table_name.constantize.columns.each do |c|

output << “#{c.name}:#{c.type}” unless ignore_columns.include?(c.name)

end

puts output.join(" ")

returns: rails g scaffold Post --skip-migration title:string body:text published_at:datetime

Tim,

Thanks. That looks like exactly what I need to get started. I’m simply not familiar enough yet with ruby or rails to have come up with that from scratch myself, but I can certainly use it and modify it to handle the naming conventions in my existing schema. Now I have to go back to working on updating Dr. Nic’s magic_model_generator to work with rails 3.

Tim,

Thanks. That looks like exactly what I need to get started. I'm simply not familiar enough yet with ruby or rails to have come up with that from scratch myself, but I can certainly use it and modify it to handle the naming conventions in my existing schema. Now I have to go back to working on updating Dr. Nic's magic_model_generator to work with rails 3.

this gem might also have things you can use