campaign.rb
class Campaign < ActiveRecord::Base
has_many :items
accepts_nested_attributes_for :item
end
item.rb的
class Item < ActiveRecord::Base
belongs_to :campaign
end
广告系列有2个属性:标题和说明
物品有1个attirubte:名称
我会尝试用文字解释自己,我想创建一个嵌套的表单,用户插入广告系列的名称和说明,但他可以插入多于1个项目,他可以插入一个项目列表(特别是会有是一个“+”按钮,当单击时,将出现一个新的项目行,用户可以插入项目)。
最后,只需点击一个提交按钮即可全部发送。
如何通过rails实现我的目标?
答案 0 :(得分:0)
来自railscasts.com网站作者的ryanbates提供了一个不错的宝石以及教程。您可以使用this并查看tutorial here
如果你想尝试手写使用fields_for,同时用here这样的形式写一下,并管理一些jquery代码来添加或删除。
答案 1 :(得分:0)
我昨天回答了一个问题。这是链接:Rails accepts_nested_attributes_for with f.fields_for and AJAX
我会写出它的工作原理&amp;提供一些资源,以帮助您提供更多的想法:
如何运作
使用f.fields_for
你会这样做:
#app/views/campaigns/new.html.erb
<%= form_for @campaign do |f| %>
<%= f.fields_for :items do |a| %>
<%= a.text_field :information %>
<% end %>
<% end %>
为了使其工作,在渲染视图之前,必须在后端build
关联ActiveRecord对象,如下所示:
#app/controllers/campaigns_controller.rb
def new
@campaign = Campaign.new
@campaign.items.build
end
通过Ajax添加额外字段
使用Ajax添加额外字段需要设计新问题的解决方案
您这样做的方法是采用f.fields_for
文字&amp;把它放到一个部分。可以从原始视图调用此partial,以及另一个视图(我们可以通过Ajax呈现)
Ajax部分的工作原理基本上是从你的表单中获取请求(ajax请求),然后在你的控制器中使用另一个动作来构建一个新的ActiveRecord对象&amp;渲染另一个包含另一个表单的部分。然后,此部分将调用原始f.fields_for
部分,允许您渲染另一个字段
然后,您的Ajax可以提取新字段&amp;将其附加到您的页面。解决id
问题(保持ID顺序和唯一ID)的方法是使用child_index
方法,并使用Time.now.to_i
生成时间戳
如果你阅读了我在这个答案顶部引用的答案,那么所有这些都是有意义的:)
为此提供了一些很好的资源: