原文參考:
http://rails-bestpractices.com/posts/9-nested-model-forms
rails2.3開始,我們便使用accepts_nested_attributes_for使得嵌套模型更易于使用...
壞習慣:
class Product < ActiveRecord::Base
has_one :detail
end
class Detail < ActiveRecord::Base
belongs_to :product
end
<% form_for :product do |f| %>
<%= f.text_field :title %>
<% fields_for :detail do |detail| %>
<%= detail.text_field :manufacturer %>
<% end %>
<% end %>
class ProductsController < ApplicationController
def create
@product = Product.new(params[:product])
@detail = Detail.new(params[:detail])
Product.transaction do
@product.save!
@detail.product = @product
@detail.save
end
end
end
這代碼看了就讓人不爽,還是學學NS說的,優雅的編碼...
class Product < ActiveRecord::Base
has_one :detail
accepts_nested_attributes_for :detail
end
<% form_for :product do |f| %>
<%= f.text_field :title %>
<% f.fields_for :detail do |detail| %>
<%= detail.text_field :manufacturer %>
<% end %>
<% end %>
class ProductsController < ApplicationController
def create
@product = Product.new(params[:product])
@product.save
end
end
上面是has_one的應用,據說還有has_many的應用-->
class Project < ActiveRecord::Base
has_many :tasks
accepts_nested_attributes_for :tasks
end
class Task < ActiveRecord::Base
belongs_to :project
end
<% form_for @project do |f| %>
<%= f.text_field :name %>
<% f.fields_for :tasks do |tasks_form| %>
<%= tasks_form.text_field :name %>
<% end %>
<% end %>
這個用法在railscast里有相應的視頻,而且文字版的也有了,熱心的rails guy還翻譯成中文了..不過中文翻譯有些地方有歧義,如果英文還行的還是看英文吧:
Nested Model Form Part 1
http://asciicasts.com/episodes/196-nested-model-form-part-1
Nested Model Form Part 2
http://asciicasts.com/episodes/197-nested-model-form-part-2
分享到:
相关推荐
通过定义嵌套的Form对象,你可以分别对每个子模型进行验证和处理,使得代码更加清晰。例如,如果你有一个用户模型,包含一个地址模型,你可以创建一个UserForm,其中包含一个AddressForm,这样就可以在一个表单中...
这在处理多层次的数据模型时非常有用,比如在处理用户地址(包含国家、城市、街道等)这样的复杂表单时,Unform可以轻松应对。 ### 3. 验证机制 Unform提供了内置的验证机制,允许开发者为每个字段指定验证规则。...
在Struts中,Form Bean是用于处理用户输入的重要组件,它充当了模型层与视图层之间的桥梁。本篇文章将深入探讨Struts中的常见Form类型及其应用。 首先,我们要理解Form Bean的作用。Form Bean是用来存储用户从页面...
在Ruby on Rails框架中,处理嵌套模型关联(Nesting Model Associations)时,经常会出现复杂的用户界面需求,比如动态添加或删除子记录。Cocoon就是为了解决这一问题而生的,它使得开发者能够方便地创建和管理动态...
Vue.js 是一个流行的前端...具体到`dynamicForm.js`和`3层嵌套.txt`的实现,可能涉及到动态生成表单元素、递归组件设计以及复杂的组件通信。通过深入学习和实践这些概念,开发者可以构建出更加灵活和强大的Vue应用。
嵌套表单是一种以一种形式处理嵌套模型和属性的表单。 例如,带有任务的项目或带有订单项的发票。 Cocoon是与表单生成器无关的茧Cocoon使处理嵌套表单变得更加容易。 嵌套表单是一种以一种形式处理嵌套模型和属性的...
9. **表单嵌套** 可以创建包含其他表单的表单,以处理更复杂的用户输入场景,如多步骤表单或分组相关数据。 10. **文件上传** Django Form也支持文件上传,通过使用`FileField`或`MultipleFileField`。记得在视图...
如果需要处理嵌套模型,Simple Form同样提供了很好的支持。使用`accepts_nested_attributes_for`在模型中声明,然后在表单中使用`fields_for`方法: ```ruby |address_form| %> <%= address_form.input :street ...
这意味着,如果你有一个嵌套字段需要清除验证状态,应该按照数组的方式传递参数,例如:`this.$refs.form.clearValidate(['form', index, 'name'])`。这一点同样没有在官方文档中被充分说明,需要开发者额外注意。 ...
- 在实际开发中,可以采用MVC(模型-视图-控制器)或MVVM(模型-视图-视图模型)等设计模式,将业务逻辑、界面展示和用户交互分离,使代码更易维护。 总结,C#中的多窗体嵌套提供了丰富的功能和灵活性,帮助开发者...
在处理这些嵌套验证时,关键在于正确地动态绑定`prop`属性,以确保每个表单元素都与其数据模型中的对应项匹配。同时,验证规则应在`rules`对象中定义,以便在用户触发特定事件(如`change`或`blur`)时触发验证。 ...
嵌套表单是一种以一种形式处理嵌套模型和属性的表单。 例如,带有任务的项目或带有订单项的发票。 Cocoon与表单生成器无关,因此可与标准Rails, 或。 它与导轨3、4和5兼容。 该项目与无关。 先决条件 这个宝石...
在Ruby on Rails框架中,嵌套模型表单是一种强大的特性,允许我们在一个单一的表单中处理多个关联模型的数据。RailsCasts第196集的"嵌套模型表单(修订版)"深入探讨了这个主题,尤其适用于Ruby 1.9.2或更高版本。这...
总结来说,这个主题涵盖了对象模型的构建、数据的无bug处理以及多文件上传的实现,这些都是现代Web开发中的关键技能。无论是前端的用户交互,还是后端的数据处理和文件管理,都需要扎实的编程技巧和良好的错误处理...
- **职责**: 绑定数据模型(`v-model`)、通知父组件(`FormItem`)执行校验。 - **实现**: 这两个组件都需要实现`v-model`的绑定,即实现`:value`和`@input`或`:checked`和`@change`。当数据变化时,它们会触发校验。...
在Admin中嵌套模型 如果模型之间存在一对一或一对多关系,Django Admin可以展示嵌套的数据。例如,`Book`模型与`Author`模型是一对一关系,我们可以在`Book`的Admin中直接编辑`Author`的信息: ```python class ...
5. **表单分组和嵌套**:`FormGroup`和`FormArray`允许将多个`FormControl`组合在一起,形成复杂的数据结构。 6. **异步验证**:使用`asyncValidator`可以在后台执行验证,提高用户体验。 在压缩包文件"card1"中,...
在Web开发中,JavaScript是一种必不可少的前端编程语言,它提供了丰富的功能来操作DOM(文档对象模型)和处理用户交互。在HTML表单(form)数据处理方面,JavaScript也扮演着重要角色。本文将深入探讨如何使用...
这是Rails的瑰宝,可以方便地以一种形式管理多个嵌套模型。 它通过jQuery或Prototype以一种毫不干扰的方式做到这一点。 此gem仅适用于 。有关可在Rails 2中使用的插件,请参见。 可以在找到示例项目,该示例如何...