Ruby on Rails 快速入门1

本文涉及的产品
云数据库 PolarDB MySQL 版,列存表分析加速 8核16GB
PolarDB Agent Express,2核4GB
PolarSearch,搜索节点 4核8GB
简介: Ruby on Rails 快速入门1

1.jpg


ruby china wiki:ruby-china.org/wiki

The Rails Doctrine: ruby-china.org/wiki/the-ra…

Guides:

  • guides.rubyonrails.org/
  • ruby-china.github.io/rails-guide…

ruby toolbox: www.ruby-toolbox.com/


0. 前言


2.jpg

最近国内互联网就业市场持续低迷,作为主要着力于前端技术的我,也开始探索后端、部署相关的技术。之前除了接触过 Node.js,还有一门我一直想学习和应用的语言就是 Ruby 了。

第一次听说 Ruby 是在 2020 年的夏天,当时还是土木 🐶 的我,从前辈口中听说了 Ruby 这个词,他说他要亲自教我,但是没有天赋的我还是去土木和设计行业卷了一阵子才正式返航计算机。虽迟但到,在 2023 年的夏天,我写下这一篇快速入门,也算是一种重逢吧!

Ruby 同样是一门面向对象的语言,抛开性能不谈,它的语法非常简单,行文甚至比 Python 还要简洁,而且足够语义化,这也是我选择它的重要原因。Rails 作为 Ruby 的开发框架,和大部分其他语言框架一样采用 MVC 架构(附录 A 中我添加了 MVC 的说明),它提供了一些工具和函数来快速开发 Web 应用程序。另一方面,它还支持主流的数据库,比如:MySQL、PostgreSQL 和 SQLite 等。

目前,我正在开发一个 H5 小应用,数据库使用的是 PostgreSQL,总体体验下来,还算 OK,如果要问我,什么是 Rails?

Rails = Routes + MVC

以下是正文。


1. 创建 Rails API

安装 ruby 的过程我就省略了,安装完成后执行 ruby --version 来查看版本。

1.1 生成 rails api 服务

在 docker 容器中执行以下命令生成一个 rails api 服务

gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
bundle config mirror.https://rubygems.org https://gems.ruby-china.com
gem install rails -v 7.0.2.3
pacman -S postgresql-libs
cd ~/repos
rails new --api --database=postgresql --skip-test catdou-1
code catdou-1
bin/rails server

会报错,需要启动一个数据库,如下。

1.2 启动 postgres 数据库

在宿主机终端执行以下命令启动一个 postgres 数据库(版本为 14)

docker run -d --name db-for-catdou -e POSTGRES_USER=catdou -e POSTGRES_PASSWORD=123456 -e POSTGRES_DB=catdou_dev -e PGDATA=/var/lib/postgresql/data/pgdata -v catdou-data:/var/lib/postgresql/data --network=network1 postgres:14

1.3 连接数据库

配置开发环境变量,config/database.yml

development:
  <<: *default
  database: catdou_dev
  username: catdou
  password: 123456
  host: db-for-catdou

重新运行 server

bin/rails server

1.4 model 定义

user 是表名,email 和 name 是字段

bin/rails g model user email:string name:string

生成数据库 migrate 文件以及 model 文件:

  • db/migrate/20230607152514_create_users.rb
class CreateUsers < ActiveRecord::Migration[7.0] # 定义一个类,用于创建表
  def change
    create_table :users do |t| # 方法名为 create_table,表名为 users
      t.string :email # 创建字段 email,类型为 string
      t.string :name # 创建字段 name,类型为 string
      
      t.timestamps # 创建时间字段:updated_at 更新时间,created_at 创建时间
    end
  end
end

app/models/user.rb

class User < ApplicationRecord
end

1.5 数据库迁移同步

将创建的 user 模型迁移到 postgres 数据库(会生成一个 users 表)

bin/rails db:migrate
bin/rails db:rollback step=1 # 如果需要的话,可以用它将数据库回退到上一步

1.6 controller 定义

生成 users 的 controller,包括 show 和 create 方法

bin/rails g controller users show create

生成 users 的控制器文件以及添加相应路由

  • app/controllers/users_controller.rb(源文件已做修改)
class UsersController < ApplicationController
  def show
    user = User.find_by_id params[:id] # 在 users 表中找到对应 id 的那一行记录
    if user
      render json: user # 如果存在,返回 user
    else
      head 404 # 如果不存在,返回一个 404 响应码
    end
  end
  def create
    # 在 users 表中新建一条记录,email 是 'eric@x.com',name 是 'eric'
    user = User.new email: 'eric@x.com', name: 'eric'
    if user.save # 如果保存成功了
      render json: user # 返回给前端 json 数据(新建的 user)
    else # 否则
      render json: user.errors # 返回给前端 json 数据(user 的报错)
  end
end

config/routes.rb(路由文件中会自动添加以下两行内容)

get 'users/show'
get 'users/create'

路由文件需要修改,上面自动生成的两句删除不用,添加以下两句代码到 routes.rb 中:

get "/users/:id", to: "users#show" # 当用户对 "/users/:id" 发起 get 请求时,对应 controller 动作为 show
post "/users/", to: "users#create" # 当用户对 "/users/" 发起 post 请求时,对应 controller 动作为 create

1.7 model 数据校验

数据校验一般在 model 层进行。假设,需要对 users 表的 email 字段进行必填校验。

那么在 app/models/users.rb 中添加以下代码即可:

class User < ApplicationRecord
  validates :email, presence: true # email 是必填的
end
  • validates :email 告诉它要校验的字段是 email
  • presence: true 校验规则是 email 必须到场(presence)


2. RESTful API

restfulapi.cn/

medium.com/@haldar.mah…


微信截图_20230702172611.png


3. API 开发

根据产品需求和 UI、UX 设计数据库与 API。

3.1 路由表生成

利用 namespace 构建以以 /api/v1 开头的 api 路由表:

config/routes.rb

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      # /api/v1
      resources :validation_codes, only: [:create]
      resource :session, only: [:create, :destroy]
      resource :me, only: [:show]
      resources :items
      resources :tags
      # resources :taggings, only: [:create, :index, :destroy]
    end
  end
end

生成路由表:bin/rails routes

$ bin/rails routes
                 Prefix Verb URI Pattern                        Controller#Action
# 验证码(申请或删除账号时)
api_v1_validation_codes POST /api/v1/validation_codes(.:format) api/v1/validation_codes#create
# 登录登出
       api_v1_session DELETE /api/v1/session(.:format)          api/v1/sessions#destroy
                        POST /api/v1/session(.:format)          api/v1/sessions#create
# 个人信息(获取姓名、邮箱)
               api_v1_me GET /api/v1/me(.:format)               api/v1/mes#show
# 所有账单(获取、新增)
            api_v1_items GET /api/v1/items(.:format)            api/v1/items#index
                        POST /api/v1/items(.:format)            api/v1/items#create
# 单笔账单(获取、更新、删除)
             api_v1_item GET /api/v1/items/:id(.:format)        api/v1/items#show
                       PATCH /api/v1/items/:id(.:format)        api/v1/items#update
                         PUT /api/v1/items/:id(.:format)        api/v1/items#update
                      DELETE /api/v1/items/:id(.:format)        api/v1/items#destroy
# 所有标签(获取,新增)
             api_v1_tags GET /api/v1/tags(.:format)             api/v1/tags#index
                        POST /api/v1/tags(.:format)             api/v1/tags#create
              api_v1_tag GET /api/v1/tags/:id(.:format)         api/v1/tags#show
                       PATCH /api/v1/tags/:id(.:format)         api/v1/tags#update
                         PUT /api/v1/tags/:id(.:format)         api/v1/tags#update
                      DELETE /api/v1/tags/:id(.:format)         api/v1/tags#destroy
# 其他

3.2 model > migrate > controller

按照附录 A 依次创建 model、迁移数据库,创建 controller

3.3 分页功能

  • kaminari # 更加简单
  • pagy # 性能更好
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
人工智能 IDE 开发工具
JetBrains RubyMine 2025.1 发布 - 最智能的 Ruby 与 Rails IDE
JetBrains RubyMine 2025.1 (macOS, Linux, Windows) - 最智能的 Ruby 与 Rails IDE
395 30
JetBrains RubyMine 2025.1 发布 - 最智能的 Ruby 与 Rails IDE
|
前端开发 测试技术 数据库
使用Ruby on Rails进行快速Web开发的技术探索
【8月更文挑战第12天】Ruby on Rails以其高效、灵活和易于维护的特点,成为了快速Web开发领域的佼佼者。通过遵循Rails的约定和最佳实践,开发者可以更加专注于业务逻辑的实现,快速构建出高质量的Web应用。当然,正如任何技术框架一样,Rails也有其适用场景和局限性,开发者需要根据项目需求和个人偏好做出合适的选择。
|
SQL 安全 数据库
Ruby on Rails 数据库迁移操作深度解析
【7月更文挑战第19天】Rails 的数据库迁移功能是一个强大的工具,它帮助开发者以版本控制的方式管理数据库结构的变更。通过遵循最佳实践,并合理利用 Rails 提供的迁移命令和方法,我们可以更加高效、安全地管理数据库结构,确保应用的稳定性和可扩展性。
|
前端开发 测试技术 数据库
Ruby on Rails:快速开发Web应用的秘密
【6月更文挑战第9天】Ruby on Rails,一款基于Ruby的Web开发框架,以其高效、简洁和强大备受青睐。通过“约定优于配置”减少配置工作,内置丰富功能库加速开发,如路由、数据库访问。活跃的社区和海量资源提供支持,MVC架构与RESTful设计确保代码清晰可扩展。高效的数据库迁移和测试工具保证质量。Rails是快速构建Web应用的理想选择,未来将持续影响Web开发领域。
|
前端开发 测试技术 API
揭秘Ruby on Rails的神秘力量:如何让你的Web应用飞起来?
【8月更文挑战第31天】Ruby on Rails(简称RoR)是一个基于Ruby语言的开源Web应用框架,自2005年发布以来,因简洁的语法、强大的功能和高效的开发效率而广受好评。RoR采用MVC架构,提高代码可读性和可维护性,拥有庞大的社区和丰富的库支持。本文通过示例代码展示其强大之处,并介绍RoR的核心概念与最佳实践,帮助开发者更高效地构建Web应用。
610 0
|
前端开发 API C++
在Ruby世界中寻找你的Web框架灵魂伴侣:Rails vs Sinatra
【8月更文挑战第31天】在Ruby的世界里,选择Web框架如同挑选衣物,需根据场合和需求。Rails与Sinatra是两大热门框架,前者以其“约定优于配置”理念和全面的功能成为企业级应用的首选;后者则以轻量级和灵活性著称,适用于快速原型开发和小规模应用。通过对比两者特性,如Rails的MVC架构与Sinatra的简洁API,我们可以看到它们各有所长。选择合适的框架,如同找到旅途中的最佳伙伴,让开发之路更加顺畅愉悦。这场探索之旅教会我们,没有绝对的好坏,只有最适合的选择。
312 0
|
安全 前端开发 数据安全/隐私保护
如何在Ruby on Rails中打造坚不可摧的OAuth认证机制
【8月更文挑战第31天】在构建现代Web应用时,认证与授权至关重要。本文介绍如何在Ruby on Rails中实现OAuth认证,通过使用`omniauth`和`devise` gems简化流程。首先安装并配置相关gem,接着在`User`模型中处理OAuth回调,最后设置路由及控制器完成登录流程。借助OAuth,用户可使用第三方服务安全地进行身份验证,提升应用安全性与用户体验。随着OAuth标准的演进,这一机制将在Rails项目中得到更广泛应用。
213 0
|
开发框架 安全 前端开发
使用Ruby on Rails进行快速Web开发
【5月更文挑战第27天】Ruby on Rails是一款基于Ruby的高效Web开发框架,以其快速开发、简洁优雅和强大的社区支持著称。遵循“约定优于配置”,Rails简化了开发流程,通过MVC架构保持代码清晰。安装Ruby和Rails后,可使用命令行工具创建项目、定义模型、控制器和视图,配置路由,并运行测试。借助Gem扩展功能,优化性能和确保安全性,Rails是快速构建高质量Web应用的理想选择。
|
监控 数据可视化 前端开发
使用Ruby on Rails构建的员工上网行为监控Web应用
我们开发了一款基于Ruby on Rails的员工上网行为监控Web应用,帮助企业保护数据安全和确保员工生产力。该应用利用Rails的MVC架构和Active Record管理数据库,通过网络代理和JavaScript追踪员工网络活动。数据收集后,应用进行分析和可视化,以便识别异常行为。此外,借助Rails的后台任务和Sidekiq gem,实现数据自动化处理和定时更新,为公司提供实时监控反馈。
526 2
|
缓存 前端开发 测试技术
框架分析(6)-Ruby on Rails
框架分析(6)-Ruby on Rails