在这篇博客中,我们将演示一次实际的Ruby on Rails开发项目。通过实战,我们将探讨如何使用Ruby on Rails框架创建一个简单的Web应用程序,包括数据库设计、模型、控制器和视图的创建,以及与外部API的集成。
目标
我们的目标是创建一个任务管理应用程序,用户可以创建、查看、更新和删除任务。我们希望应用程序具有用户认证、任务优先级和任务截止日期的功能。
步骤
1. 创建新的Rails应用
首先,我们将使用以下命令创建一个新的Rails应用:
$ rails new task_manager
这将创建一个名为task_manager
的新项目目录,并安装所需的Rails依赖项。
2. 数据库设计
接下来,我们需要设计数据库模式以存储任务信息。我们将使用SQLite数据库,它是Rails默认的数据库引擎。
在db/migrate
目录中,我们创建一个新的数据库迁移文件:
$ rails generate migration CreateTasks
编辑生成的迁移文件,定义任务表的结构:
class CreateTasks < ActiveRecord::Migration[6.0]
def change
create_table :tasks do |t|
t.string :title
t.text :description
t.integer :priority
t.date :due_date
t.timestamps
end
end
end
运行数据库迁移以创建任务表:
$ rails db:migrate
3. 创建模型
现在我们将创建一个模型类来操作任务数据。运行以下命令生成模型文件:
$ rails generate model Task
编辑生成的模型文件,定义任务模型和与数据库表的映射关系:
class Task < ApplicationRecord
validates :title, presence: true
validates :priority, numericality: { only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 5 }
end
4. 创建控制器和视图
接下来,我们将创建一个控制器用于处理任务的CRUD操作,并创建相应的视图文件用于显示任务。
运行以下命令生成控制器文件:
$ rails generate controller Tasks
编辑生成的控制器文件,定义完成CRUD操作的方法:
class TasksController < ApplicationController
def index
@tasks = Task.all
end
def show
@task = Task.find(params[:id])
end
def new
@task = Task.new
end
def create
@task = Task.new(task_params)
if @task.save
redirect_to @task
else
render 'new'
end
end
def edit
@task = Task.find(params[:id])
end
def update
@task = Task.find(params[:id])
if @task.update(task_params)
redirect_to @task
else
render 'edit'
end
end
def destroy
@task = Task.find(params[:id])
@task.destroy
redirect_to tasks_path
end
private
def task_params
params.require(:task).permit(:title, :description, :priority, :due_date)
end
end
创建相应的视图文件用于显示任务列表、任务详情、创建任务和编辑任务。
5. 集成用户认证
为了允许用户创建和管理他们自己的任务,我们将添加用户认证功能。Rails提供了一个名为Devise
的开源认证解决方案。
在Gemfile
中添加devise
:
gem 'devise'
运行以下命令安装和生成devise
配置:
$ bundle install
$ rails generate devise:install
$ rails generate devise User
运行数据库迁移以创建用户表:
$ rails db:migrate
在必要的地方添加before_action :authenticate_user!
以限制对任务的访问。
6. 集成外部API
为了增强我们的任务管理应用程序,我们将添加一个天气接口作为外部API的示例。
在Gemfile
中添加httparty
:
gem 'httparty'
创建一个新的API类用于获取天气信息:
class WeatherAPI
include HTTParty
base_uri 'https://api.weather.com'
def self.weather(city)
response = get("/weather/#{city}")
response.parsed_response['weather']
end
end
在任务控制器中,我们将通过调用WeatherAPI.weather(city)
来获取天气信息,并将其传递给视图层。
至此,我们的Ruby on Rails开发实战项目演练完成,我们已经学习了如何使用Ruby on Rails框架创建一个简单的任务管理应用程序,并集成了用户认证和外部API。
希望这篇博客对你了解Ruby on Rails开发有所帮助,如果你对这个主题还有其他问题,请随时留言!
本文来自极简博客,作者:云计算瞭望塔,转载请注明原文链接:Ruby on Rails开发实战