Ruby on Rails Series - Part II
Ruby on Rails - Part II
Rails New Command & Options
In this part of the Rails series, I want to name a few commands that Rails gives us, as well commands that generates some code for us.
- First we’ll start with
rails new <app_name>.newcalls the class AppBuilder inside the ActionMethods module.- the third option is the name of your app.
- We can also pass arguments to
rails newto better configure the application to our needs. We can find these options by appending--helpcommand at the end ofrails new. But some of the commands that I use most are: --database=postgresqlor-d postgresqlwill configure the application to connect to a PostgreSQL database rather than SQLite, Rails default database. This in turn creates and configures theconfig/database.ymlfile.--skip-turbolinksI like skipping the installation for turbolinks as well because it sometimes have conflicts with my javascript.--skip-test-unitSo why would I want to skip Test::Unit? Although I am a fan of it’s simplicity and no overhead configuration, I may want to use Rspec as well, so I like the option of not having the/testcreated from the beginning.- Haml is my templating of choice, but I have not found an option for Rails to create
hamlfiles out of the box withrails newcommand. So after creating a base application, I add thehaml-railsgem in myGemfileand then can runrake haml:erb2hamlfrom the command line to convert all theerbfiles tohaml.
rails serverorrails s- The
rails servercommand launches a small web server named WEBrick which comes bundled with Ruby. This server listens to port 3000 by default, but that can be easily changed by passing-p <port number>
- The
Rails Generators
rails generate scaffold Post body:text title- By running the scaffold command, Rails will generate all the code below (model-migration, controller, views, tests) Although when developing real world app I never use the scaffold generator. It creates too much unnecessary code.
rails g controller- Controller names are plural.
-
So when running
rails g controller <name>we should make the<name>plural, or rails will complain. This command like the rails new command takes arguments as well.rails g controller posts index showwill createcreate app/controllers/posts_controller.rb route get 'posts/show' route get 'posts/index' invoke erb create app/views/posts create app/views/posts/index.html.erb create app/views/posts/show.html.erb invoke test_unit create test/controllers/posts_controller_test.rb invoke helper create app/helpers/posts_helper.rb invoke test_unit invoke assets invoke coffee create app/assets/javascripts/posts.coffee invoke scss create app/assets/stylesheets/posts.scss
Note the created views and assets.
rails g model- Models are singular.
-
The command above also takes options
rails g model post body:text title invoke active_record create db/migrate/20160313045013_create_posts.rb create app/models/post.rb invoke test_unit create test/models/post_test.rb create test/fixtures/posts.yml
With this command Rails gives us not only the model for post,
but also creates a migration for us (we’ll talk about migration in later posts)
Where we have the table name for well you guessed it posts,
and the columns for body and title
-
For Single Table Inheritence (STI) we can also pass
--parent articleoption. This would be it’s generated code.class Post < Article end <model_name>:referencesWhen you want to have a foreign key based on model associations we have the option to pass in areference. This will add the<model_name> idto the table.<model_name>:references{polymorphic}for polymorphic associations.
Why is this important?
Using Rails built-in generators can help us to create applications faster and less error prone. It will create the correct directories/files based on its conventions.