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 版本选择相应的安装步骤。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0192- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
awesome-zig一个关于 Zig 优秀库及资源的协作列表。Makefile00