`
fireflyman
  • 浏览: 118431 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

嵌套模型的form

    博客分类:
  • ROR
阅读更多
原文參考: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
分享到:
评论

相关推荐

    Ruby-Reform能够给你一个Form对象模型包含验证和嵌套设置

    通过定义嵌套的Form对象,你可以分别对每个子模型进行验证和处理,使得代码更加清晰。例如,如果你有一个用户模型,包含一个地址模型,你可以创建一个UserForm,其中包含一个AddressForm,这样就可以在一个表单中...

    react-Unform是一个ReactJS表单库用于创建表单结构包含嵌套字段验证等等

    这在处理多层次的数据模型时非常有用,比如在处理用户地址(包含国家、城市、街道等)这样的复杂表单时,Unform可以轻松应对。 ### 3. 验证机制 Unform提供了内置的验证机制,允许开发者为每个字段指定验证规则。...

    Struts常见的Form(一)

    在Struts中,Form Bean是用于处理用户输入的重要组件,它充当了模型层与视图层之间的桥梁。本篇文章将深入探讨Struts中的常见Form类型及其应用。 首先,我们要理解Form Bean的作用。Form Bean是用来存储用户从页面...

    Ruby-Cocoon轻松处理容易嵌套表单

    在Ruby on Rails框架中,处理嵌套模型关联(Nesting Model Associations)时,经常会出现复杂的用户界面需求,比如动态添加或删除子记录。Cocoon就是为了解决这一问题而生的,它使得开发者能够方便地创建和管理动态...

    vue 多级嵌套示范

    Vue.js 是一个流行的前端...具体到`dynamicForm.js`和`3层嵌套.txt`的实现,可能涉及到动态生成表单元素、递归组件设计以及复杂的组件通信。通过深入学习和实践这些概念,开发者可以构建出更加灵活和强大的Vue应用。

    使用jQuery的动态嵌套表单变得容易; 适用于formtastic,simple_form或默认表单-Ruby开发

    嵌套表单是一种以一种形式处理嵌套模型和属性的表单。 例如,带有任务的项目或带有订单项的发票。 Cocoon是与表单生成器无关的茧Cocoon使处理嵌套表单变得更加容易。 嵌套表单是一种以一种形式处理嵌套模型和属性的...

    Python关于 Django 的web- Form 表单验证

    9. **表单嵌套** 可以创建包含其他表单的表单,以处理更复杂的用户输入场景,如多步骤表单或分组相关数据。 10. **文件上传** Django Form也支持文件上传,通过使用`FileField`或`MultipleFileField`。记得在视图...

    Ruby-SimpleForm轻松处理Rails表单

    如果需要处理嵌套模型,Simple Form同样提供了很好的支持。使用`accepts_nested_attributes_for`在模型中声明,然后在表单中使用`fields_for`方法: ```ruby |address_form| %&gt; &lt;%= address_form.input :street ...

    ant-design-vue3.x的form表单爬坑.pdf

    这意味着,如果你有一个嵌套字段需要清除验证状态,应该按照数组的方式传递参数,例如:`this.$refs.form.clearValidate(['form', index, 'name'])`。这一点同样没有在官方文档中被充分说明,需要开发者额外注意。 ...

    多窗体嵌套,Csharp

    - 在实际开发中,可以采用MVC(模型-视图-控制器)或MVVM(模型-视图-视图模型)等设计模式,将业务逻辑、界面展示和用户交互分离,使代码更易维护。 总结,C#中的多窗体嵌套提供了丰富的功能和灵活性,帮助开发者...

    vue elementUI 表单嵌套验证的实例代码

    在处理这些嵌套验证时,关键在于正确地动态绑定`prop`属性,以确保每个表单元素都与其数据模型中的对应项匹配。同时,验证规则应在`rules`对象中定义,以便在用户触发特定事件(如`change`或`blur`)时触发验证。 ...

    cocoon:使用jQuery的动态嵌套表单变得容易; 适用于表格,simple_form或默认表格

    嵌套表单是一种以一种形式处理嵌套模型和属性的表单。 例如,带有任务的项目或带有订单项的发票。 Cocoon与表单生成器无关,因此可与标准Rails, 或。 它与导轨3、4和5兼容。 该项目与无关。 先决条件 这个宝石...

    196-nested-model-form-revised

    在Ruby on Rails框架中,嵌套模型表单是一种强大的特性,允许我们在一个单一的表单中处理多个关联模型的数据。RailsCasts第196集的"嵌套模型表单(修订版)"深入探讨了这个主题,尤其适用于Ruby 1.9.2或更高版本。这...

    无bug带属性填充包括对象嵌套属性填充与多文件上传

    总结来说,这个主题涵盖了对象模型的构建、数据的无bug处理以及多文件上传的实现,这些都是现代Web开发中的关键技能。无论是前端的用户交互,还是后端的数据处理和文件管理,都需要扎实的编程技巧和良好的错误处理...

    【JavaScript源代码】Vue模仿ElementUI的form表单实例代码.docx

    - **职责**: 绑定数据模型(`v-model`)、通知父组件(`FormItem`)执行校验。 - **实现**: 这两个组件都需要实现`v-model`的绑定,即实现`:value`和`@input`或`:checked`和`@change`。当数据变化时,它们会触发校验。...

    django中如何使用admin进行多个模型的后台管理

    在Admin中嵌套模型 如果模型之间存在一对一或一对多关系,Django Admin可以展示嵌套的数据。例如,`Book`模型与`Author`模型是一对一关系,我们可以在`Book`的Admin中直接编辑`Author`的信息: ```python class ...

    angular-form.7z

    5. **表单分组和嵌套**:`FormGroup`和`FormArray`允许将多个`FormControl`组合在一起,形成复杂的数据结构。 6. **异步验证**:使用`asyncValidator`可以在后台执行验证,提高用户体验。 在压缩包文件"card1"中,...

    用Javascript将form所有内容序列化和反序列化的例子。

    在Web开发中,JavaScript是一种必不可少的前端编程语言,它提供了丰富的功能来操作DOM(文档对象模型)和处理用户交互。在HTML表单(form)数据处理方面,JavaScript也扮演着重要角色。本文将深入探讨如何使用...

    nested_form:Rails插件可在一个表单中方便地处理多个模型

    这是Rails的瑰宝,可以方便地以一种形式管理多个嵌套模型。 它通过jQuery或Prototype以一种毫不干扰的方式做到这一点。 此gem仅适用于 。有关可在Rails 2中使用的插件,请参见。 可以在找到示例项目,该示例如何...

Global site tag (gtag.js) - Google Analytics