前提
- ↓从上一篇文章中已经创建 Hello World 应用程序的地方开始。
- 既然目的是体验CRUD,那么简单易用的功能和设计就完全被忽略了。
控制器准备
之前的功能只是显示users表的数据,
我想添加额外的注册/更新/删除功能。
它是实现所谓的 CRUD 功能的图像。
- C(创建 - 注册)
- R(读 - 见)
- U(更新)
- D(删除)
?奖金
R(reference) 上次已经实现了,但是由于它只实现了所有记录的获取,
这次,我们还将实现一个功能,允许您通过指定键来引用特定数据。
让我们先制作框架。
class UsersController < ApplicationController
def index
@users = User.all
end
def show
end
def new
end
def create
end
def edit
end
def update
end
def destroy
end
private
def permit_params
params.require(:user).permit(:name, :age)
end
end
我会写每个的内容。
显示(见)
def show
@user = User.find(params[:id])
end
查找与参数中收到的 id 匹配的用户。
创造
def new
@user = User.new
end
def create
@user = User.new(permit_params)
@user.save
redirect_to @user
end
new 新用户模型并显示新注册屏幕。create 是实际注册过程。使用参数中接收到的内容注册到 users 表。
更新后,重定向到显示屏幕。
更新
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
@user.update(permit_params)
redirect_to @user
end
edit 检索与参数中接收到的 ID 匹配的数据,并将其显示在更新屏幕上。update 是实际的更新过程。
使用参数中接收的内容更新与 ID 匹配的用户数据,并创建。
删除
def destroy
@user = User.find(params[:id])
@user.destroy
redirect_to users_path
end
销毁与参数中接收到的 ID 匹配的数据。
使它成为一个强参数
def permit_params
params.require(:user).permit(:name, :age)
end
我们将稍微修改参数,以便可以执行注册/更新处理。require 检查用户模型中是否存在密钥并提取它。
允许保存permit 指定的列。
参看。
https://pikawaka.com/rails/permit
路由设置
让我们同样添加routes.rb 来调用我们添加到Controller 中的方法。
Rails.application.routes.draw do
resources :users
end
这一行似乎很好。 (我试图写点东西。)
我参考了下面的 Rails 官方参考。
似乎只用上面的一行描述就可以完成各种路由设置。
即,进行以下设置。
| HTTP 动词 | 小路 | 控制器#动作 | 目的 |
|---|---|---|---|
| 得到 | /users | 用户#index | 显示所有用户列表 |
| 得到 | /photos/new | 照片#新 | 返回用于创建用户的 HTML 表单 |
| 邮政 | /users | 用户#创建 | 创建 1 个用户 |
| 得到 | /users/:id | 用户#显示 | 引用特定用户 |
| 得到 | /photos/:id/edit | 照片#编辑 | 返回一个 HTML 表单供用户编辑 |
| 补丁/放置 | /users/:id | 用户#更新 | 更新特定用户 |
| 删除 | /users/:id | 普豪斯托斯#destroy | 删除特定用户 |
嗯。
查看准备
目前,我们只为显示用户列表的索引创建一个视图,所以
准备一个屏幕(视图)以供参考/注册/更新/删除。
在/app/views/users 下创建它。
<p>Show Page</p>
<p>
ID:<%= @user.id %>
Name:<%= @user.name %>
Age:<%= @user.age %>
</p>
<%= link_to 'top', users_path %>
查询画面。
显示参数中指定 ID 的用户数据。
下面是列表屏幕的链接。
<p>New Page</p>
<%= form_with model: @user do |form| %>
<div>
<%= form.label :name %><br>
<%= form.text_field :name %>
</div>
<div>
<%= form.label :age %><br>
<%= form.text_field :age %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
这是注册屏幕。
将每个输入表单中输入的值作为表单传递。
使用form.submit 执行创建过程。
<p>Edit Page</p>
<%= form_with model: @user do |form| %>
<div>
<%= form.label :name %><br>
<%= form.text_field :name %>
</div>
<div>
<%= form.label :age %><br>
<%= form.text_field :age %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
这是更新画面。
每个输入表单最初都显示具有指定 ID 的用户数据。
您可以通过重写表单值来更新用户数据。form.submit 将执行更新过程。
此外,我稍微调整了索引并添加了一个链接,以便您可以过渡到每个屏幕。
<p>Index Page</p>
<%= link_to 'new', new_user_path %>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr>
<% @users.each do |user| %>
<tr>
<td><%= user.id %></td>
<td><%= user.name %></td>
<td><%= user.age %></td>
<td><%= link_to 'show', user_path(user) %></td>
<td><%= link_to 'edit', edit_user_path(user) %></td>
<td><%= link_to 'destroy', user_path(user),
data: {turbo_method: 'delete', turbo_confirm: 'Are you sure?'} %>
</td>
</tr>
<% end %>
</table>
显示注册屏幕、每个数据的查询屏幕、更新屏幕的链接和删除链接。
让我们实际移动
我马上写了,但让我们检查一下操作。
顶部屏幕
它列出了正确输入的数据。
首先,按new 链接注册一个新帐户。
注册屏幕
安装了用户表的name 和age 列的输入表单和提交按钮。
输入姓名和年龄,然后按“创建用户”按钮
查询画面
移至查询屏幕。
在注册画面上输入的takagiage的数据被注册并显示。
使用top 返回顶部屏幕。
新注册的takagi 现已上市。
更新画面
按edit 按钮。
早先注册的takagi的数据,初始设置在输入表单中。takagi 今年 29 岁。所以我会修复它。
按Update User 按钮。
已成功更新至29 岁。
删除
删除takagi。单击destroy 链接。
将出现带有Are You Sure? 的确认对话框。
如果您按キャンセル,对话框将关闭并保留在顶部屏幕上而不会被删除。
按OK。
takagi 已被删除。
在最后
- 这次我在一个简单的
users表上体验了CRUD。 - 我想创建一个相关表,并一起更新或删除相关数据。
- 我很难为工作编写 rspec,所以我想尽快了解它...
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308622681.html