倾心打造快速开发利器——The Brick!
从任何现有数据库轻松启动Rails应用
欢迎进入一个神奇的世界,这里可以即时运行的Rails应用程序只需一键生成!这个gem会自动创建模型、视图、控制器和路由,并且所有这些都不是一堆原始的辅助文件,而是存储在内存中。最棒的是,当你对数据库进行如添加新表或列的修改时,基础功能会立即可用,无需额外编写代码。对于像列表只读、编辑启用后的布局规则(在线或弹出模态)等通用行为,可以全局设定,同时也可以对每个模型进行更精细的行为调整和默认设置覆盖。
你可以以多种方式使用The Brick,例如快速浏览现有的数据集,全链路导航关联数据;轻松更新和创建数据,将表格或视图导出为CSV或Google Sheets;导入数据集,即使每一行都涉及到多个目标表;自动生成API端点;逐步创建最小化的辅助应用程序,按需编写文件;尝试各种数据布局,评估给定数据库设计的功能性等等。
我们有来自Deanin的**YouTube视频教程**,为你展示了如何从零开始。非常感谢你的分享!
此外,还有我早期录制的视频教程概述,建议准备好爆米花并开启播放器音量,因为这是一段较长的讲解:
简要概述
The Brick的宗旨是尽可能遵循Rails惯例。因此,模型、控制器和视图被独立处理。你可以选择仅自动化构建模型,然后自己编写控制器和视图,或者让The Brick自动构建一部分资源的控制器和视图,同时允许你在其他部分加入自定义代码。无论你想如何混合搭配,都是可能的。The Brick的目标是自动完成应用程序中更多繁琐而简单的部分,让你能专注于解决更棘手的问题。
默认生成的页面提供每个模型的“索引”和“显示”视图,通过链接展示相关的模型。列出所有记录的“索引”页只需一次数据库查询,避免了常见的“N+1”查询问题。智能JOIN添加策略确保了即使请求多跳远的数据字段,也能优化查询性能。这使开发者免于编写复杂的ActiveRecord查询。直到版本1.0.91,这种方法相当成功,但当涉及自我引用的表,如Employee表上有manager_id
字段并使用定制的DSL [name]
时,从相关表(如orders
)的查询中,员工的名字和其上司的名字可能会显示相同(虽然显然员工和上司在同一个表中是两个不同的记录)。为了修复这个问题,从1.0.92版本开始,采用了一种全新的方法,即在解析Arel的AST树时捕获表别名逻辑,准确追踪与关联名称相对应的关系表。这还带来了一个很酷的功能,即查找复杂ActiveRecord查询的表别名。
“显示”页面上,单个记录的CRUD操作可以直接完成。日期和时间字段使用轻量级库“flatpickr”实现弹出日历编辑。
在模型层面,所有主要的ActiveRecord关联都被构建出来,包括has_many和belongs_to,以及has_many :through、Single Table Inheritance(STI)和多态关联。基于数据库中的外键,生成相应的belongs_tos,然后添加与其相反的has_manys。进一步地,如果有仅包含belongs_to字段的表,会被认为是“关联”(或“连接”)表,接着会添加适当的has_many :through关联。比如,如果存在如下关系:
Recipe --> RecipeIngredient <-- Ingredient
首先,在RecipeIngredient上建立两个belongs_to关联,然后反向添加两个对应的has_manys —— 一个是Recipe中的,另一个是Ingredient中的。最后,如果RecipeIngredient被认为是关联表(只要除了这两个外键之外没有其他列,即recipe_id和ingredient_id),那么在Recipe中会自动添加HMT:
has_many :ingredients, through: :recipe_ingredients
而在Ingredient中也会添加另一个HMT:
has_many :recipes, through: :recipe_ingredients
这样,访问http://localhost:3000/recipes
时,就可以看到每个食谱以及它所需的全部食材,通过HMT实现。
如果(或两者)的外键在数据库中缺失,可以在初始化文件中添加。例如,如果Recipe和RecipeIngredient之间的外键丢失,可以通过以下方式在初始文件中指定:
::Brick.additional_references = [['recipe_ingredients', 'recipe_id', 'recipes']]
The Brick可以自动生成初始化文件,只需运行rails g brick:install
,并在过程中自动推断缺失的外键参考。它基于找到看起来像是适当键名的列名,并在数据类型与主键类型匹配时做出注释掉的建议。通过取消注释你需要的部分(甚至全部),对The Brick来说,这些外键就像是存在的,Rails就会提供参照完整性。
许多其他设置可以在config/initializers/brick.rb
中找到。
还有很多有趣的生成器,如果你想从现有数据库生成一套迁移文件,可以运行生成器bin/rails g brick:migrations
。同样,可以生成模型文件:bin/rails g brick:models
。甚至现有的数据行也可以保存到db/seeds.rb
文件中,只需运行bin/rails g brick:seeds
。有关这些的更多信息,请参阅1.f,1.g,1.h部分——“自动生成___文件”的章节。
这篇文章无法一一列举The Brick的所有功能和优势,但它已经足够引起你的兴趣,探索这个强大的工具,看看它如何简化你的工作流程。无论是快速浏览数据库结构,还是构建高度互动的应用程序,The Brick都将是你开发过程中的强大盟友。现在就开始你的旅程吧!
- CangjieCommunity为仓颉编程语言开发者打造活跃、开放、高质量的社区环境Markdown00
- redis-sdk仓颉语言实现的Redis客户端SDK。已适配仓颉0.53.4 Beta版本。接口设计兼容jedis接口语义,支持RESP2和RESP3协议,支持发布订阅模式,支持哨兵模式和集群模式。Cangjie034
- 每日精选项目🔥🔥 推荐每日行业内最新、增长最快的项目,快速了解行业最新热门项目动态~ 🔥🔥02
- Sscreenshot-to-code上传一张屏幕截图并将其转换为整洁的代码(HTML/Tailwind/React/Vue)Python03
- advanced-javaAdvanced-Java是一个Java进阶教程,适合用于学习Java高级特性和编程技巧。特点:内容深入、实例丰富、适合进阶学习。JavaScript088
- qwerty-learner为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workersTSX023
- Yi-CoderYi Coder 编程模型,小而强大的编程助手HTML07
- taro开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.zone/TypeScript09
- CommunityCangjie-TPC(Third Party Components)仓颉编程语言三方库社区资源汇总05
- Bbrew🍺 The missing package manager for macOS (or Linux)Ruby01