Turbo Rails Tutorial-第十一章
Adding a quote total with Turbo Frames本章节中,我们将添加一个包含quote总价格的sticky bar,每当我们创建,修改,删除一个line item,总价都会被更新。
What we will build in this chapter总价格会在下面的情况中更新:
一个line item被创建,修改,删除
一个line item date被删除,而一个line item date中可能有多个items
下面的草图,将会展示我们的quote编辑器长什么样子:
现在需求明确了,敲代码吧。
**Note: **现在我们已经体验过很多次Turbo Frames了,让我们来讨论一下什么时候使用<turbo-frame> 或是 <div>
当我们需要使用Turbo去拦截点击链接或者表单提交时,我们必须使用Turbo Frame比如line_items/_line_item.html.erb局部页面的内容必须被嵌套到Turbo Frame中,因为当我们点击line item的”Edit”按钮时,我们希望Turbo ...
Turbo Rails Tutorial-第十章
Nested Turbo Frames这一章,我们为line items构建最后的增删改查代码,而line items是嵌入到line items dates中的,为此我们需要使用Turbo Frames去解决一些有趣的挑战。
What we will build in this chapter本章中,我们会大致敲定quote编辑器,通过增加line item到line item date中,每一个line item都拥有名称,可选的描述,单价,数量。
这一章的的挑战是我们将会有大量的嵌套Turbo Frames,我们将讨论如何在操作LineItemDate and LineItem增删改查时,并Quotes#show页面的状态。
在敲代码前,我们在看一下线上的示例:final quote editor,让我们创建一个quote并且进入对应的Quotes#show页面,让每位创建几个 line item dates and line items,来对我们最终的产品有一个确定的概念。
当我们清楚了最终产品的样子,我们就开始吧,我们会先不用Turbo Frames and Tu ...
Turbo Rails Tutorial-第九章
Another CRUD controller with Turbo Rails本章节中,我们将构建quotes中的日期数据的增删改查,这是一个很好的机会去练习我们之前学习的内容。
What we will build in the following three chapters现在用户可以创建,修改,删除quotes数据,是时候让我们的quotes编辑器做一些更有用的事儿。
接下来三章,我们将在Quotes#show页面中构建,当本章结束时,我们的用户可以为每个quotes添加多个日期,而每个日期里有多个条目,每个条目拥有名称,可选的描述信息,数量,单价。
在动手之前,我们可以再在线上实例中体验一下:quote editor on hotrails.dev,创建一个quote,进入Quotes#show页面,我们可以创建多个日期,并在日期里添加多个条目,当我们创建,修改,删除条目时,quote的总额也会被更新。
What we will build in this chapter我们还是在不使用Turbo Frames和Turbo Streams的前提下构建日期数据的增 ...
Turbo Rails Tutorial-第八章
Two ways to handle empty states with Hotwire本章节中,我们将会学习两种方式去使用Turbo控制空状态页,第一种使用Turbo Frames and Turbo Streams,第二种使用 the only-child CSS pseudo-class.
Adding empty states to our Ruby on Rails applications空状态页是我们系统中最重要的一部分,当我们第一次访问页面时,页面上没有任何提示让我们知道这个页面能干嘛。所以如果当一个新用户访问我们系统时,显示一点儿图片或者几句话可以更好的表达页面可以操作什么。
如果我们删除了所有的quotes数据,我们的页面也就只剩下标题和按钮了,所以当数据为空时,使用空状态页也会是一个好的选择。让我们开始吧
Empty states with Turbo Frames and Turbo Streams在敲代码之前,让我们花点儿时间,用草图描述一下将要干嘛。当一个用户没有数据时,我们想展示包含提示信息的空状态
如果用户点击header中的New qu ...
Turbo Rails Tutorial-第七章
Flash messages with Hotwire 本章节,我们将学习如何添加 flash messages 通过Turbo,并且如何通过Stimulus做出好看的动画效果。
Adding flash messages to our CRUD controller现在我们Quote模型的增删改查已经正常运转了,现在我们想添加flash message去提高系统的可用性。
在使用Turbo增加flash message之前,我们需要先来用不使用Turbo的版本,也就是Rails7之前的方式,而为了做到这一点,我们需要禁用Turbo在整个项目中。
// app/javascript/application.js
import "./controllers"
// The two following lines disable Turbo on the whole application
import { Turbo } from "@hotwired/turbo-rails"
Turbo.session.drive = false
这样我们 ...
Turbo Rails Tutorial-第六章
Turbo Streams and security
本章我们将学习如何安全的使用Turbo Stream 和 避免广播数据到非法的用户。
Understanding Turbo Streams and security在将Turbo Streams放在线上环境前,我们必须知道如何保证安全,如果把含有私密数据的HTML发送到了不该接收的人那里,这会是一个很大的问题。
让我们想象一下我们的quote编辑器被一个公司使用,公司内有很多的员工,如果有天我们的数据被一个不属于该公司的人获取到了,那这就是个很大安全事故了。
我们将使用Devise gem对用户操作,模拟现实生活来对Turbo Stream security进行学习,并且我们将展示如果我们不够足够重视,将会出现哪些安全问题。
What we will build我们将画一个草图来说明本章结束时系统的样子,我们将对没有登录的用户展示登录页面链接
然后用户通过输入用户名,密码进行登录
我们的用户在登录后跳转到首页,在导航栏中我们将根据电子邮件地址显示公司名称和用户名称,当点击View quotes按钮时,他们便可以操作 ...
Turbo Rails Tutorial-第五章
Real-time updates with Turbo Streams本章节,我们将学习如何使用Action Cable 广播 Turbo Stream templates,来让我们的页面进行实时跟新。
Turbo Stream format 可以仅用几行代码就与 Action Cable结合,来让我们的页面实时更新,当然与:群聊,通知,邮箱服务是类似的。
让我们用邮箱服务来举例,比如当我们收到一封新的邮箱,我们不想去手动的刷新让它显示,相反我们希望它能自己在页面上更新,而不需要我们操作什么。
而实现这一功能对于Rails来说很容易,因为在Rails5时就发布了Active Cable。本章将要讨论的Turbo Rails的一部分是建立在Action Cable之上的,而实现该功能,也就更加简单了。
我们要做什么来想象一下,如果有许多人同时使用我们的quote编辑器,他们更希望实时看到同事们都写了什么。
在Quotes#index页面:
任何时候一个成员创建了新的quote,我们希望该quote立刻被加到我们的quotes列表的最上面
任何时候一个成员修改了一个quot ...
Turbo Rails Tutorial-第四章
Turbo Drive这一章我们将解释Turbo Drive是什么?它是怎么转化Link clicks和Form submissions为Ajax请求来加速Rails系统。
是什么?Turbo Drive是Turbo的第一部分,已经被Rails7默认引入了,可以看一下Gemfile和application.js
# Gemfile
# Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
gem "turbo-rails"
// app/javascript/application.js
// Entry point for the build script in your package.json
import "@hotwired/turbo-rails"
import "./controllers"
通过Turbo Drive,HTML页面不会被完全重新渲染,当我们的Turbo Drive拦截一个link clikc or a form ...
Turbo Rails Tutorial-第二章
实现简单的增删改查
这一章,我们将要创建quote模型,并关联Controller通过Rails的约定
我们先通过Excalidraw来画一些草图,来描述我们要做的事儿
在Quotes#index页面中,我们将展示quotes集合,并且每个quote都有详情,修改,删除的按钮,并且也有增加的按钮。下面是样式图:
当点击New quote按钮时跳转到Quotes#new页面:
当点击Create quote时跳转到Quotes#index页面,显示存储的数据,并按照时间排序。
当你点击Edit按钮时,就会跳转到Quotes#edit去更新已有的数据
当点击Update quote,还是跳回Quotes#index页面
当点击quote的标题时,则跳转到Quotes#show,现在我们仅仅显示标题,后面增加其他内容。
在开始之前,我们先创建一些测试用例去确保我们构建的内容正常
测试
测试是软件开发的基础部分,如果没有一个强有力的测试,我们将会引入bug,并无意间影响以往的功能。
创建测试文件
bin/rails g system_test quotes
编写 ...
Turbo Rails Tutorial-第一章
我们将学习使用,Rails7默认引入的tubo-rails库,并创建一个响应式的单页面应用,而无需编写任何自定义JavaScript代码。
简介
这一章我们将解释要学习的内容,看下成品的样子,并且开始我们的项目。
线上试用:https://www.hotrails.dev/quotes,类似于一个账单管理器,你可以试着添加数据,并进行编辑。
为什么学习Turbo?伴随着2021年12月7日发布的Rails7,Hotwire整合了Stimulus和Turbo。成为了默认的前端框架。下面我们看看Turbo与Rails整合带来的新的特点:
第一:所有的链接和表单提交转为Ajax请求,通过Turbo Drive可以加速我们的系统,我们只需要简单的引入,而不需要做其他操作,即可获得好处。
第二:通过Turbo Frames几行代码,我们就可以很容易的将页面切割为小的组件,可以替换或延迟加载页面的独立部分。
第三:通过Turbo Stream就可以增加实时更新的特点。你可以做类似的多用户游戏或者实时监控系统。
通过本次教程的学习,你将知道所有的细节关于上面三点。
本教程适用范围本 ...