Updating scaffold views after adding new column - ruby-on-rails

I created a table using scaffold. Later added a new column
$ rails generate migration add_column_name_to_table_name column_name:string
$ rake db:migrate
Now I'm wondering is there any way to auto-update earlier generated by scaffold views?

Nope, you've got to do it manually.
FWIW, these sorts of changes are made much easier if you're using one of the form generator gems.

Related

Ruby on rails updating model via rails console

I have run rails g model Task description:text. Then I have run rails console and put in a few tasks. I would now like to add more attributes to the create_tasks.rb file. Such as .string :title.
What I tried:
opened the file(create_tasks.rb), put the new line in. Then ran rake
db:migrate then went back into the console and opened the first task
and it doesn't show the title attribute.
also tried creating a new task using the title attribute. Error:
unknown title attribute for Task.
So, how do I update the model?
Welcome to Rails!
Here you can find some tutorials about how to deal with migrations:
http://edgeguides.rubyonrails.org/active_record_migrations.html
https://www.tutorialspoint.com/ruby-on-rails/rails-migrations.htm
Basically, every time you want to modify a migration, you must:
run rake db:rollback
modify the migration
run rake db:migrate
I hope this helps. Good coding!!
You need to rails db:rollback to roll the database back before the latest migration, add the new variables to the migration file, then run rails db:migrate to have the new parts of the migration file included.
If you need to roll back more revisions (if you have created more migrations since you created this model), you can either include the number of roll backs like
rails db:rollback STEP=<enter number of steps>
#e.g. rails db:rollback STEP=2
or, you could also rails db:reset which would remove all databases, recreate them, then remigrate them. Or you could rails db:drop to drop the database, then rails db:create and rails db:migrate to migrate the new database.
Do not edit the schema file. The schema file is automatically updated when you run migrations etc to match the content of your migration files.

Is there any possible way to create migration with out using rails "generater"?

I'm a newbie, learning rails with Active Record. Can we create or alter migration with out using rails generater??
If you want to alter the existing migration without using the generator, there is a hack for it.
In your db, there will be a table named as schema_migrations. Remove the timestamp from that particular migration you wanna alter, from that table. Run rake db:migrate again with the alterations and the migration will run again.

Rake db:migrate and HTML generated not changing

I'm very new to RoR and building my first application. I used rails generate scaffold and created a table in database. Of course I did it wrong, wanted to make changes to the table, did it by rewriting the generated migration file. I think rake db:migrate works fine, because it's updating my schema, but there are no changes visible on the site. The view of the table didn't change, although the mechanism is different, I can't add anything now because it can't find the proper columns after I changed them. I have no idea how to fix it without rewriting the view files myself. Is it possible, I think I'm missing something?
You can undo/destroy scaffold by rails destroy scaffold scaffold_name and then re-generate scaffold with the columns you added on migration file. FYI, editing migration files is not a good practice.
You have two options, either you destroy the scaffolding that you've created with rails destroy scaffold ModelName or you change the views by hand. When you run rake db:migrate it won't do anything in the views.

Is there a built in way to rename an entire scaffold?

I'm using Rails 3.2, and have started with a scaffolding and built out from it, but have realized I need to rename the entire scaffold (Model, View, Controller, db:migrate, etc). Is there a built in way to do this, or should I just do it manually?
I don't think there's anything rails provides to rename the name of models/controllers/views/tests etc. once they are created - whether as a part of a scaffold, or not.
You will have to change it manually.
If it is a brand new app that you have just started on, it might be easier to just delete the whole directory/drop the database, and start over again.
If not, you will have to go through the files created/modified by the scaffold generation, and modify them manually.
Make sure you either drop_and_recreate the relevant table, or add a migration to rename the table. See How do you write a migration to rename an ActiveRecord model and its table in Rails? for some relevant advice.
I think there's no out of the box method to rename files generated by scaffold.What you have to do is create a new scaffold and copy your codes from the old to the new.Copy contents from factories, model, controller and their respective spec file to the new scaffold. Then remove the old scaffold with the command
rspec d scaffold <Model Name>
and you have to create a new migration to drop that old table from the database. Then run your migrations.

Ruby on Rails : purpose of db:migrate

When I read Rails book, each time they create a new database, always follow a db:migrate.
rails generate scaffold school
rake db:migrate
In console view, I see at first line, Rails create some files, no problem. but in second line, I see that Rails isn't really change anything. I have view some files that Rails nearly create and see no change too.
So, what the purpose of line 2, please tell me.
Thanks :)
The rake migrates the changes into your database. It is which acttually changes the database schema to match your previously generated scaffolded model.
Without it, you wouldn't have a table to write your objects into. Or in case of changed model, the table could differ from your model, leading to error.
When you generate a model (or scaffold one) a migration file is created in your db/migration directory. It is a pure text file, you can create such manually, if you want. This is the tool for the iterative development in rails regarding the database. Each migration adds some change to the system. When you run rake db:migrate your database is updated by the given migrations. This is a handy tool in case of distributed development, when one programmer can check out the code from the repository, and can run the migrations on his own development database.
db:migrate, is the command that tells rails to update the database with new changes. Think of it as this way
when u say rails generate scaffold rails will generate files like a model, controller etc.. and it create a file under db/migrate which has the sql script to update the database.
Ex: if you run rails generate scaffold User name:string, then you will need a table called users in the database with the column 'name', that sql script will generated under db/migrate folder
with db:migrate, command, you are telling rails to migrate new sql scripts to the database, in the above case, it will creates the 'users' table
if you run rake -T, from your rails application root, you could see all the rake tasks
HTH :)

Resources