Rails入门学习
快速搭建项目
在开始Rails之前,需要安装Ruby工具。之后可以通过如下的命令安装rails:
gem install -v 8.1.3 rails
之后就可以正式创建Rails应用了,为了避免下载缓慢的问题,可以配置国内源:
bundle config mirror.https://rubygems.org https://mirrors.tuna.tsinghua.edu.cn/rubygems
下面我们创建1个Blog的应用:
rails new blog --skip-bundle bundle install
这里选择--skip-bundle参数避免工具自动运行bundle install而造成等待缓慢问题,通过手动执行可以知道其具体异常问题。
接着进入blog目录开始创建数据库并将应用运行起来:
bin/rails db:create # Windows上为rails.bat db:create bin/rails server # Windows上为rails.bat server
此时访问http://localhost:3000即可看到Rails默认的欢迎页面。
创建数据库模型
Active Record是Rails中将关系型数据库映射为Ruby代码的一种特性。
下面我们创建1个Product的模型,即Product表,在该表中有1个字段name,通过使用generate子命令进行模型的生成:
$ bin/rails generate model Product name:string
invoke active_record
create db/migrate/20260705214000_create_products.rb
create app/models/product.rb
invoke test_unit
create test/models/product_test.rb
create test/fixtures/products.yml
打开create_products.rb文件可以看到如下的内容:
# db/migrate/<timestamp>_create_products.rb
class CreateProducts < ActiveRecord::Migration[8.1]
def change # 修改
create_table :products do |t| # 创建表
t.string :name
t.timestamps
end
end
end
之后运行如下的命令进行数据表的迁移:
$ bin/rails db:migrate
若迁移过程发生异常可以运行如下命令进行回滚:
$ bin/rails db:rollback
Rails终端
Rails的终端模式提供了1种交互式编程的方式,通过如下的方式进入终端:
$ bin/rails console Loading development environment (Rails 8.1.0) blog(dev)>
此时可以针对之前的Product模型进行一些操作,比如查看其表字段及创建记录:
blog(dev)> Product.column_names
=> ["id", "name", "created_at", "updated_at"]
blog(dev)> product = Product.new(name: "T-Shirt") # 实例化Product类
=> #<Product:0x000000012e616c30 id: nil, name: "T-Shirt", created_at: nil, updated_at: nil>
blog(dev)> product.save # 保存到数据库中
=> true
Rails路由
如果对MVC比较熟悉的话,可以很容易理解Rails中路由的定义。比如有如下的请求路径:
GET /products?sale=true&sort=asc
其可能对应Rails中config/routes.rb中如下的代码:
# config/routes.rb
Rails.application.routes.draw do
# ...
get "/products", to: "products#index"
end
其中/products是相应的路由地址,而to后面是是控制器中对应的方法。而对应products控制器的文件名称为位于app/controllers下的products_controller.rb。其对应的代码如下:
# app/controllers/products_controller.rb
class ProductsController < ApplicationController
def index
end
end
我们可以通过如下的方式生成控制器
$ bin/rails generate controller Products index --skip-routes
create app/controllers/products_controller.rb
invoke erb
create app/views/products
create app/views/products/index.html.erb
invoke test_unit
create test/controllers/products_controller_test.rb
invoke helper
create app/helpers/products_helper.rb
invoke test_unit
之后我们可以通过如下的方法查看其所有路由:
$ bin/rails routes
Prefix Verb URI Pattern Controller#Action
products GET /products(.:format) products#index
POST /products(.:format) products#create
new_product GET /products/new(.:format) products#new
edit_product GET /products/:id/edit(.:format) products#edit
product GET /products/:id(.:format) products#show
PATCH /products/:id(.:format) products#update
PUT /products/:id(.:format) products#update
DELETE /products/:id(.:format) products#destroy
参考文章: