2023-01-29 15:09:45 +08:00
# Welcome to \Rails
2023-01-29 13:37:31 +08:00
2023-01-29 15:09:45 +08:00
## What's \Rails?
2023-01-29 13:37:31 +08:00
2023-01-29 15:09:45 +08:00
\Rails is a web-application framework that includes everything needed to
2023-01-29 13:37:31 +08:00
create database-backed web applications according to the
2023-01-29 15:03:25 +08:00
[Model-View-Controller (MVC) ](https://en.wikipedia.org/wiki/Model-view-controller )
2023-01-29 13:37:31 +08:00
pattern.
2023-01-29 15:09:45 +08:00
Understanding the MVC pattern is key to understanding \Rails. MVC divides your
2023-01-29 13:37:31 +08:00
application into three layers: Model, View, and Controller, each with a specific responsibility.
2023-01-29 15:03:25 +08:00
## Model layer
2023-01-29 13:37:31 +08:00
2023-01-29 15:03:25 +08:00
The _**Model layer**_ represents the domain model (such as Account, Product,
2023-01-29 13:37:31 +08:00
Person, Post, etc.) and encapsulates the business logic specific to
2023-01-29 15:09:45 +08:00
your application. In \Rails, database-backed model classes are derived from
`ActiveRecord::Base` . [Active Record ](files/activerecord/README.rdoc ) allows you to present the data from
2023-01-29 13:37:31 +08:00
database rows as objects and embellish these data objects with business logic
2023-01-29 15:03:25 +08:00
methods.
2023-01-29 15:09:45 +08:00
Although most \Rails models are backed by a database, models can also be ordinary
2023-01-29 13:37:31 +08:00
Ruby classes, or Ruby classes that implement a set of interfaces as provided by
2023-01-29 15:09:45 +08:00
the [Active Model ](files/activemodel/README.rdoc ) module.
2023-01-29 13:37:31 +08:00
2023-01-29 15:03:25 +08:00
## View layer
2023-01-29 13:37:31 +08:00
2023-01-29 15:03:25 +08:00
The _**View layer**_ is composed of "templates" that are responsible for providing
appropriate representations of your application's resources. Templates can
come in a variety of formats, but most view templates are HTML with embedded
2023-01-29 15:09:45 +08:00
Ruby code (\ERB files). Views are typically rendered to generate a controller response
or to generate the body of an email. In \Rails, View generation is handled by [Action View ](files/actionview/README.rdoc ).
2023-01-29 15:03:25 +08:00
## Controller layer
The _**Controller layer**_ is responsible for handling incoming HTTP requests and
2023-01-29 15:09:45 +08:00
providing a suitable response. Usually, this means returning HTML, but \Rails controllers
2023-01-29 13:37:31 +08:00
can also generate XML, JSON, PDFs, mobile-specific views, and more. Controllers load and
2023-01-29 15:03:25 +08:00
manipulate models, and render view templates in order to generate the appropriate HTTP response.
2023-01-29 15:09:45 +08:00
In \Rails, incoming requests are routed by Action Dispatch to an appropriate controller, and
2023-01-29 15:03:25 +08:00
controller classes are derived from `ActionController::Base` . Action Dispatch and Action Controller
2023-01-29 15:09:45 +08:00
are bundled together in [Action Pack ](files/actionpack/README.rdoc ).
2023-01-29 13:37:31 +08:00
2023-01-29 15:03:25 +08:00
## Frameworks and libraries
2023-01-29 13:37:31 +08:00
2023-01-29 15:09:45 +08:00
[Active Record ](files/activerecord/README.rdoc ), [Active Model ](files/activemodel/README.rdoc ), [Action Pack ](files/actionpack/README.rdoc ), and [Action View ](files/actionview/README.rdoc ) can each be used independently outside \Rails.
2023-01-29 13:37:31 +08:00
2023-05-29 15:51:06 +08:00
In addition to that, \Rails also comes with:
2023-01-29 13:37:31 +08:00
2023-01-29 15:09:45 +08:00
- [Action Mailer ](files/actionmailer/README.rdoc ), a library to generate and send emails
2023-06-23 09:49:30 +08:00
- [Action Mailbox ](files/actionmailbox/README.md ), a library to receive emails within a \Rails application
2023-01-29 15:09:45 +08:00
- [Active Job ](files/activejob/README.md ), a framework for declaring jobs and making them run on a variety of queuing backends
2023-06-23 09:49:30 +08:00
- [Action Cable ](files/actioncable/README.md ), a framework to integrate WebSockets with a \Rails application
- [Active Storage ](files/activestorage/README.md ), a library to attach cloud and local files to \Rails applications
2023-01-29 15:09:45 +08:00
- [Action Text ](files/actiontext/README.md ), a library to handle rich text content
- [Active Support ](files/activesupport/README.rdoc ), a collection of utility classes and standard library extensions that are useful for \Rails, and may also be used independently outside \Rails
2023-01-29 13:37:31 +08:00
2023-01-29 15:03:25 +08:00
## Getting Started
2023-01-29 13:37:31 +08:00
2023-08-18 05:12:43 +08:00
1. Install \Rails at the command prompt if you haven't yet:
2023-01-29 13:37:31 +08:00
2023-01-29 15:03:25 +08:00
$ gem install rails
2023-01-29 13:37:31 +08:00
2023-08-18 05:12:43 +08:00
2. At the command prompt, create a new \Rails application:
2023-01-29 13:37:31 +08:00
2023-01-29 15:03:25 +08:00
$ rails new myapp
2023-01-29 13:37:31 +08:00
2023-08-18 05:12:43 +08:00
where "myapp" is the application name.
2023-01-29 13:37:31 +08:00
2023-08-18 05:12:43 +08:00
3. Change directory to `myapp` and start the web server:
2023-01-29 13:37:31 +08:00
2023-01-29 15:03:25 +08:00
$ cd myapp
$ bin/rails server
2023-01-29 13:37:31 +08:00
2023-08-18 05:12:43 +08:00
Run with `--help` or `-h` for options.
2023-01-29 13:37:31 +08:00
2023-08-18 05:12:43 +08:00
4. Go to `http://localhost:3000` and you'll see the \Rails bootscreen with your
\Rails and Ruby versions.
5. Follow the guidelines to start developing your application. You may find the
following resources handy:
2023-01-29 13:37:31 +08:00
2023-01-29 15:03:25 +08:00
* [Getting Started with Rails ](https://guides.rubyonrails.org/getting_started.html )
* [Ruby on Rails Guides ](https://guides.rubyonrails.org )
* [The API Documentation ](https://api.rubyonrails.org )
2023-01-29 13:37:31 +08:00
2023-01-29 15:03:25 +08:00
## Contributing
2023-01-29 13:37:31 +08:00
2023-01-29 15:09:45 +08:00
We encourage you to contribute to Ruby on \Rails! Please check out the
2023-01-29 15:03:25 +08:00
[Contributing to Ruby on Rails guide ](https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html ) for guidelines about how to proceed. [Join us! ](https://contributors.rubyonrails.org )
2023-01-29 13:37:31 +08:00
2023-01-29 15:09:45 +08:00
Trying to report a possible security vulnerability in \Rails? Please
2023-01-29 15:03:25 +08:00
check out our [security policy ](https://rubyonrails.org/security ) for
2023-01-29 13:37:31 +08:00
guidelines about how to proceed.
2023-01-29 15:09:45 +08:00
Everyone interacting in \Rails and its sub-projects' codebases, issue trackers, chat rooms, and mailing lists is expected to follow the \Rails [code of conduct ](https://rubyonrails.org/conduct ).
2023-01-29 13:37:31 +08:00
2023-01-29 15:03:25 +08:00
## License
2023-01-29 13:37:31 +08:00
2023-01-29 15:09:45 +08:00
Ruby on \Rails is released under the [MIT License ](https://opensource.org/licenses/MIT ).