{"id":1513,"date":"2026-09-15T11:20:05","date_gmt":"2026-09-15T10:20:05","guid":{"rendered":"https:\/\/ruby-doc.org\/learn\/?p=1513"},"modified":"2026-09-11T11:37:17","modified_gmt":"2026-09-11T10:37:17","slug":"what-is-ruby-on-rails","status":"publish","type":"post","link":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/","title":{"rendered":"What Is Ruby on Rails? A Beginner&#8217;s Guide to Web Apps"},"content":{"rendered":"\n<div class=\"wp-block-group rd-article is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>What is Ruby on Rails? It is a web application framework written in Ruby.<\/strong> Rails gives developers a structure and a collection of tools for building applications that receive requests, work with data and return responses. A Rails app might run a booking service, an internal business tool or a membership website.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The name describes two related things. Ruby is the programming language. <a href=\"https:\/\/www.codecademy.com\/resources\/blog\/what-is-ruby-on-rails\">Rails is the framework<\/a> you use with that language. Knowing a little Ruby helps you read Rails code, but learning Rails also means understanding how a web application works.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/what-is-ruby-on-rails-featured.webp\" alt=\"Ruby gem travelling along rails beside connected browser, routing, application and database symbols.\" class=\"wp-image-1578\" srcset=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/what-is-ruby-on-rails-featured.webp 1536w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/what-is-ruby-on-rails-featured-300x200.webp 300w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/what-is-ruby-on-rails-featured-1024x683.webp 1024w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/what-is-ruby-on-rails-featured-768x512.webp 768w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><figcaption class=\"wp-element-caption\">Ruby on Rails provides tools for connecting web requests, application logic and stored data.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What is Ruby on Rails used for?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Consider a local lending library. Members need to browse items and request loans. Staff need to record returns and see overdue items. The application has records, rules and different kinds of users. Those are the sort of connected web workflows you can build with Rails.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rails can generate pages that a browser displays. It can also return structured data to another application. The official API guide explains the latter arrangement. For a first project, you usually learn more by choosing one clear delivery style than by trying to build every possible client.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start small. A working list of books and a form to add a new one is a useful first milestone. A complete library system with payments, reservations and notifications is a product with many separate decisions. Rails supplies tools for that work; it does not decide the rules of the library.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ruby supplies the language; Rails supplies conventions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ruby code uses objects, methods and expressions to describe behaviour. Rails builds on the language with names and locations for common application parts. Once you know the conventions, you can often make a reasonable first guess about where a feature lives.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our <a href=\"https:\/\/ruby-doc.org\/learn\/ruby-vs-ruby-on-rails\/\">Ruby versus Ruby on Rails guide<\/a> explains this distinction in more detail. You can write Ruby programs without Rails. A script that organises local files, for instance, does not automatically need a web framework.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conventions help when a team agrees to follow them. They can feel mysterious at first because some connections are established by naming rather than explicit configuration. When you encounter that, trace one example carefully. Understanding a convention is more useful than memorising a command that happens to produce the right files.<\/p>\n\n\n\n<div class=\"wp-block-group rd-guide is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Try the project guide<\/h2>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><span>Which part would you like to understand?<\/span><\/p>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Choose a situation<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">How a request enters the app<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Where the data belongs<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What the browser receives<\/p>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div>\n\n\n\n<details class=\"wp-block-details rdc-disclosure is-layout-flow wp-block-details-is-layout-flow\"><summary>Start with the route<\/summary>\n<p class=\"wp-block-paragraph\">Follow one URL and HTTP method to its controller action. Then identify the response the action returns.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details rdc-disclosure is-layout-flow wp-block-details-is-layout-flow\"><summary>Look at the model and database<\/summary>\n<p class=\"wp-block-paragraph\">Identify the stored record, its relationships and its validation rules. Distinguish an in-memory object from saved data.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details rdc-disclosure is-layout-flow wp-block-details-is-layout-flow\"><summary>Inspect the response<\/summary>\n<p class=\"wp-block-paragraph\">For a page, read the rendered HTML and the view that produces it. For an API, inspect its data and error responses.<\/p>\n<\/details>\n\n\n\n<p class=\"rd-guide-note wp-block-paragraph\">Use these suggestions to plan a small experiment. Open any section to compare the alternatives.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Follow one request through a Rails application<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine a member opens the page for a particular book. Their browser sends an HTTP request. The application&#8217;s routing rules identify which controller action should handle it. That action coordinates the work needed to produce the response.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The application may load a book record and check whether the person is allowed to see it. It then prepares the information for the response. In a page-based application, a view renders HTML that the browser can display. A later request, such as submitting a loan form, goes through its own handling process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is the model, view and controller arrangement introduced in the Rails getting-started guide. Treat it as a way to organise responsibilities. It is not a claim that every request always touches a database or renders an HTML template.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Models describe application data and behaviour<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A library might have Book and Loan models. A loan could link a member to a book and record a due date. The model layer is a useful place to think about data relationships and the rules surrounding that data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rails commonly uses Active Record to connect models with relational database tables. For a beginner, the important distinction is that a Ruby object in memory and a saved database record are not the same thing. A change to an object is not safely stored merely because it appears on your screen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Controllers coordinate requests<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A controller action handles a particular interaction, such as showing a book or processing a loan request. It should make the expected outcome clear. If a loan request is invalid, the response needs to explain the problem rather than leaving the member guessing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Keep that coordination understandable. A large controller containing every rule about lending, reminders and stock soon becomes hard to review. As the application grows, give related behaviour clear homes and use tests to describe what it must do.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Views present the result<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A view controls how information is presented. For the book page, that might include the title, availability and a request button. It should also handle missing information, long titles and the case where borrowing is unavailable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Think about the reader using the page on a narrow screen. The successful outcome is completing a task, not merely rendering HTML without an error. Clear labels, useful feedback and accessible interaction belong in the first version.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What happens when data changes?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Adding a due date to loans changes the structure of the stored data. Rails has migration tools for describing database changes over time. That helps a team apply an agreed change across its environments. It does not remove the need to consider existing records.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, what due date should an old loan receive? Can the new field be empty while the change rolls out? Write down the answer before changing production data. A development database with three sample rows will not reveal every problem found in years of real records.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a first project, keep your sample data easy to recreate. Practise making a small schema change and checking its effect. Learn how the application, database and migration history relate before working with data you cannot afford to lose.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Does Rails need JavaScript?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A Rails application can serve ordinary HTML pages and forms. JavaScript becomes relevant when you want behaviour in the browser, such as updating a part of the page or managing a more involved interaction. You do not need to begin by building a separate frontend application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/guides.rubyonrails.org\/working_with_javascript_in_rails.html\">Rails JavaScript guide<\/a> describes options including import maps and JavaScript bundling. Learn the approach used by your actual project. Avoid mixing setup instructions from unrelated tutorials without checking which tools they assume.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the library example, first make requesting a loan work with a clear response. Then decide whether the page needs a live availability update. Adding interaction after the basic workflow is reliable gives you a smaller problem to debug.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What should a beginner learn first?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Learn enough Ruby to read methods, arrays, hashes and simple objects. Then learn the basic web vocabulary: requests, responses, URLs, HTML forms and status codes. You do not need to master the entire language before opening a Rails tutorial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our <a href=\"https:\/\/ruby-doc.org\/learn\/ruby-code-examples\/\">Ruby code examples<\/a> offer small language exercises. Use them to practise reading values and predicting results. When you move into Rails, keep asking where a value came from and which part of the application is responsible for changing it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Work through documentation for the Rails version installed in your project. Installation details and defaults can change. Check the official guide&#8217;s prerequisites, then keep the application&#8217;s dependency files with the project so another person can reproduce the environment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Your first useful Rails project<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Build a tiny lending catalogue with an item list, an item page and an add-item form. Include an empty list and reject a blank title. This gives you a complete route from input to saved data and back to a visible result.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, ask someone else to use it. Watch whether they understand the labels and error messages. Make one change based on what they find, then check that adding and viewing items still works. That small feedback cycle teaches more than generating several unfinished applications.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before putting the project online, learn its configuration and deployment requirements. Keep real credentials out of source files and avoid using real member information in exercises. A local tutorial application becomes a different responsibility when other people rely on it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Is Ruby on Rails a programming language?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. Ruby is the programming language, and Rails is a web framework written in that language. You use Ruby to describe how your application behaves and Rails to organise common web application tasks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Is Rails only for beginners?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. It can support substantial applications, but a framework cannot guarantee a good design. As the product grows, the team still needs to manage database behaviour, access rules, testing and operations.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I use Rails for an API?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. Rails can return data for other clients, including a separate web interface or a mobile application. That setup needs a clear contract for authentication, response formats and errors.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How long does learning Rails take?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">There is no standard amount of time it takes to learn Rails. Someone who already knows Ruby and web requests starts from a different point than a complete beginner. Look at your completed small project and your ability to explain it as measures of progress.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Understand Ruby on Rails through a simple library-loan application, from an incoming request to a saved record and a response in the browser.<\/p>\n","protected":false},"author":3,"featured_media":1578,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-1513","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>What Is Ruby on Rails? How It Works and Where to Start<\/title>\n<meta name=\"description\" content=\"What is Ruby on Rails? Learn how the framework handles web requests, data and pages, what you need to learn, and how to plan your first small app.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What Is Ruby on Rails? How It Works and Where to Start\" \/>\n<meta property=\"og:description\" content=\"What is Ruby on Rails? Learn how the framework handles web requests, data and pages, what you need to learn, and how to plan your first small app.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/\" \/>\n<meta property=\"og:site_name\" content=\"Ruby-Doc Learn\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-15T10:20:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/what-is-ruby-on-rails-featured.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"James Britt\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James Britt\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/\"},\"author\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/james-britt\\\/#james-britt\"},\"headline\":\"What Is Ruby on Rails? A Beginner&#8217;s Guide to Web Apps\",\"datePublished\":\"2026-09-15T10:20:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/\"},\"wordCount\":1588,\"publisher\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/what-is-ruby-on-rails-featured.webp\",\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/\",\"name\":\"What Is Ruby on Rails? How It Works and Where to Start\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/what-is-ruby-on-rails-featured.webp\",\"datePublished\":\"2026-09-15T10:20:05+00:00\",\"description\":\"What is Ruby on Rails? Learn how the framework handles web requests, data and pages, what you need to learn, and how to plan your first small app.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/what-is-ruby-on-rails-featured.webp\",\"contentUrl\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/what-is-ruby-on-rails-featured.webp\",\"width\":1536,\"height\":1024,\"caption\":\"Ruby on Rails provides tools for connecting web requests, application logic and stored data.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/what-is-ruby-on-rails\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What Is Ruby on Rails? A Beginner&#8217;s Guide to Web Apps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#website\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/\",\"name\":\"Ruby-Doc Learn\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#organization\",\"name\":\"Ruby-Doc Learn\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ruby-doc-logo-transparent.png\",\"contentUrl\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ruby-doc-logo-transparent.png\",\"width\":1650,\"height\":305,\"caption\":\"Ruby-Doc Learn\"},\"image\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/james-britt\\\/#james-britt\",\"name\":\"James Britt\",\"image\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/jgb_self-portrait-20140914.png\",\"description\":\"Creator and long-term maintainer of Ruby-Doc.org, founder of Neurogami, and author of practical Ruby tutorials for Ruby-Doc Learn.\",\"sameAs\":[\"https:\\\/\\\/jamesbritt.com\\\/\",\"https:\\\/\\\/neurogami.com\\\/\",\"https:\\\/\\\/www.oreilly.com\\\/pub\\\/au\\\/2595\",\"https:\\\/\\\/www.rubyevents.org\\\/profiles\\\/james-britt\"],\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/james-britt\\\/\",\"jobTitle\":\"Ruby developer and writer\",\"knowsAbout\":[\"Ruby programming language\",\"Ruby documentation\",\"JRuby\",\"Open Sound Control\",\"Software development\"],\"affiliation\":{\"@type\":\"Organization\",\"name\":\"Ruby-Doc.org\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What Is Ruby on Rails? How It Works and Where to Start","description":"What is Ruby on Rails? Learn how the framework handles web requests, data and pages, what you need to learn, and how to plan your first small app.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/","og_locale":"en_US","og_type":"article","og_title":"What Is Ruby on Rails? How It Works and Where to Start","og_description":"What is Ruby on Rails? Learn how the framework handles web requests, data and pages, what you need to learn, and how to plan your first small app.","og_url":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/","og_site_name":"Ruby-Doc Learn","article_published_time":"2026-09-15T10:20:05+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/what-is-ruby-on-rails-featured.webp","type":"image\/webp"}],"author":"James Britt","twitter_card":"summary_large_image","twitter_misc":{"Written by":"James Britt","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/#article","isPartOf":{"@id":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/"},"author":{"@id":"https:\/\/ruby-doc.org\/learn\/james-britt\/#james-britt"},"headline":"What Is Ruby on Rails? A Beginner&#8217;s Guide to Web Apps","datePublished":"2026-09-15T10:20:05+00:00","mainEntityOfPage":{"@id":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/"},"wordCount":1588,"publisher":{"@id":"https:\/\/ruby-doc.org\/learn\/#organization"},"image":{"@id":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/#primaryimage"},"thumbnailUrl":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/what-is-ruby-on-rails-featured.webp","articleSection":["Programming"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/","url":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/","name":"What Is Ruby on Rails? How It Works and Where to Start","isPartOf":{"@id":"https:\/\/ruby-doc.org\/learn\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/#primaryimage"},"image":{"@id":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/#primaryimage"},"thumbnailUrl":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/what-is-ruby-on-rails-featured.webp","datePublished":"2026-09-15T10:20:05+00:00","description":"What is Ruby on Rails? Learn how the framework handles web requests, data and pages, what you need to learn, and how to plan your first small app.","breadcrumb":{"@id":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/#primaryimage","url":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/what-is-ruby-on-rails-featured.webp","contentUrl":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/what-is-ruby-on-rails-featured.webp","width":1536,"height":1024,"caption":"Ruby on Rails provides tools for connecting web requests, application logic and stored data."},{"@type":"BreadcrumbList","@id":"https:\/\/ruby-doc.org\/learn\/what-is-ruby-on-rails\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ruby-doc.org\/learn\/"},{"@type":"ListItem","position":2,"name":"What Is Ruby on Rails? A Beginner&#8217;s Guide to Web Apps"}]},{"@type":"WebSite","@id":"https:\/\/ruby-doc.org\/learn\/#website","url":"https:\/\/ruby-doc.org\/learn\/","name":"Ruby-Doc Learn","description":"","publisher":{"@id":"https:\/\/ruby-doc.org\/learn\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ruby-doc.org\/learn\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ruby-doc.org\/learn\/#organization","name":"Ruby-Doc Learn","url":"https:\/\/ruby-doc.org\/learn\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ruby-doc.org\/learn\/#\/schema\/logo\/image\/","url":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-doc-logo-transparent.png","contentUrl":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-doc-logo-transparent.png","width":1650,"height":305,"caption":"Ruby-Doc Learn"},"image":{"@id":"https:\/\/ruby-doc.org\/learn\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/ruby-doc.org\/learn\/james-britt\/#james-britt","name":"James Britt","image":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/jgb_self-portrait-20140914.png","description":"Creator and long-term maintainer of Ruby-Doc.org, founder of Neurogami, and author of practical Ruby tutorials for Ruby-Doc Learn.","sameAs":["https:\/\/jamesbritt.com\/","https:\/\/neurogami.com\/","https:\/\/www.oreilly.com\/pub\/au\/2595","https:\/\/www.rubyevents.org\/profiles\/james-britt"],"url":"https:\/\/ruby-doc.org\/learn\/james-britt\/","jobTitle":"Ruby developer and writer","knowsAbout":["Ruby programming language","Ruby documentation","JRuby","Open Sound Control","Software development"],"affiliation":{"@type":"Organization","name":"Ruby-Doc.org","url":"https:\/\/ruby-doc.org\/"}}]}},"_links":{"self":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/posts\/1513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/comments?post=1513"}],"version-history":[{"count":5,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/posts\/1513\/revisions"}],"predecessor-version":[{"id":1602,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/posts\/1513\/revisions\/1602"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/media\/1578"}],"wp:attachment":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/media?parent=1513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/categories?post=1513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/tags?post=1513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}