Awesome Nested Fields 项目技术文档
1. 安装指南
Rails 3.1
-
在
Gemfile中添加以下内容,并运行bundle install以确保 gem 安装成功:gem 'awesome_nested_fields' -
在
app/assets/javascripts/application.js文件中添加以下内容,以确保 JavaScript 依赖项被添加到 asset pipeline 中。请确保在 jQuery 和 jQuery UJS Adapter 之后添加此行://= require jquery.nested-fields -
现在你可以开始使用 awesome 嵌套模型了。
Rails 3.0
-
在
Gemfile中添加以下内容,并运行bundle install以确保 gem 安装成功。请确保在jquery-rails之后添加此行,以确保 JavaScript 文件按正确顺序添加到模板中:gem 'awesome_nested_fields' -
使用生成器将 JavaScript 依赖项复制到
public/javascripts目录:rails generate awesome_nested_fields:install -
(可选)JavaScript 依赖项将自动添加到默认的 JavaScript 文件中。如果你在模板中没有使用
javascript_include_tag :defaults,请手动引入文件:<script src="/javascripts/jquery.nested-fields.min.js" type="text/javascript"></script> -
现在你可以开始使用 awesome 嵌套模型了。
2. 项目使用说明
模型设置
首先,确保具有 has_many 或 has_and_belongs_to_many 关系的对象接受嵌套属性的集合。例如,如果一个 Person 模型有多个 Phone 模型,可以这样设置:
class Person < ActiveRecord::Base
has_many :phones
accepts_nested_attributes_for :phones, allow_destroy: true
end
accepts_nested_attributes_for 是 Active Record 的一个方法,允许你直接将嵌套模型的属性传递给父模型,而不是单独实例化每个子对象。
视图设置
接下来,在表单视图中使用 nested_fields_for 方法。它接收关联或集合名称、可选的选项哈希以及包含嵌套字段的块。例如:
<%= form_for(@person) do |f| %>
<% # person fields... %>
<h2>Phones</h2>
<div class="items">
<%= f.nested_fields_for :phones do |f| %>
<fieldset class="item">
<%= f.label :number %>
<%= f.text_field :number %>
<a href="#" class="remove">remove</a>
<%= f.hidden_field :id %>
<%= f.hidden_field :_destroy %>
</fieldset>
<% end %>
</div>
<a href="#" class="add">add phone</a>
<% # more person fields... %>
<% end %>
nested_fields_for 方法列出了该 Person 拥有的 Phone,并添加了一个空的模板用于创建新的 Phone。
JavaScript 设置
最后,在页面加载时激活嵌套字段操作。可以在 application.js 文件中添加以下内容:
$(document).ready(function(e) {
$('FORM').nestedFields();
});
3. 项目API使用文档
视图选项
show_empty
有时你可能希望在集合为空时显示一些内容。只需将 show_empty 设置为 true,并在块中处理 nil 情况:
<%= f.nested_fields_for :phones, show_empty: true do |f| %>
<% if f %>
<% fields code... %>
<% else %>
<p class="empty">There are no phones.</p>
<% end %>
<% end %>
JavaScript 选项
选择器
为了使嵌套字段动态工作,JavaScript 代码需要知道要使用的元素。默认情况下,这是通过用 CSS 类标记关键元素来完成的,但你也可以使用其他选择器:
itemSelector:标记集合中的每个项(默认.item)containerSelector:标记包含项的元素(默认.items)addSelector:标记用于添加新项的元素(默认.add)removeSelector:标记用于删除项的元素(默认.remove)emptySelector:标记在没有任何项时显示的元素(默认.empty)
回调函数
可以在项插入或删除之前或之后执行操作。有四个回调函数可用:beforeInsert、afterInsert、beforeRemove 和 afterRemove。所有回调函数都接收项作为第一个参数:
element.nestedFields({
beforeInsert: function(item) {
item.css('color', 'red'); // 执行某些操作
console.log(item + ' will be inserted.')
},
afterRemove: function(item) {
console.log(item + ' was removed.');
}
});
4. 项目安装方式
项目的安装方式已在“安装指南”部分详细说明。请根据你的 Rails 版本选择相应的安装步骤。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00