Ruby on rails 不仅仅是一个简单的嵌套形式

Ruby on rails 不仅仅是一个简单的嵌套形式,ruby-on-rails,Ruby On Rails,campaign.rb class Campaign < ActiveRecord::Base has_many :items accepts_nested_attributes_for :item end class Item < ActiveRecord::Base belongs_to :campaign end class活动

campaign.rb

class Campaign < ActiveRecord::Base
  has_many :items
  accepts_nested_attributes_for :item
end
class Item < ActiveRecord::Base
  belongs_to :campaign
end
class活动
item.rb

class Campaign < ActiveRecord::Base
  has_many :items
  accepts_nested_attributes_for :item
end
class Item < ActiveRecord::Base
  belongs_to :campaign
end
class项
活动有两个属性:标题和描述
项目有1个属性:名称

我将尝试用文字解释自己,我想创建一个嵌套表单,用户可以在其中插入活动的名称和描述,但他可以插入多个项目,他可以插入项目列表(特别是将有一个“+”按钮,单击该按钮时,将出现一个新项目行,用户可以插入项目)。
最后,只需单击一个提交按钮即可发送所有内容。
如何使用rails实现我的目标?

railscasts.com网站的作者ryanbates提供了一个很好的宝石和教程。您可以使用并查看


此外,如果您想在以类似的形式编写时手动使用字段,并管理一些用于添加或删除的jquery代码。

我昨天刚刚回答了一个问题。以下是链接:

我将写下它是如何工作的,并提供一些资源来帮助您获得更多想法:


它的工作原理

使用
f.fields\u for

您将这样做:

#app/views/campaigns/new.html.erb
<%= form_for @campaign do |f| %>
    <%= f.fields_for :items do |a| %>
        <%= a.text_field :information %>
    <% end %>
<% end %>
#app/controllers/campaigns_controller.rb
def new
    @campaign = Campaign.new
    @campaign.items.build
end

通过Ajax添加额外字段

使用Ajax添加额外字段需要设计一个新的解决方案

这样做的方法是将
文本的
f.fields\u放入一个部分。可以从原始视图以及另一个视图(我们可以通过Ajax渲染)调用此部分

Ajax部分的工作原理是从表单中获取一个请求(Ajax请求),然后在控制器中使用另一个操作来构建一个新的ActiveRecord对象&呈现另一个将包含另一个表单的部分。然后,此部分将调用原始的
f.fields\u作为
partial,允许您渲染另一个字段

然后,Ajax可以提取新字段并将其附加到页面中。解决
id
问题(保持id的顺序和唯一性)的方法是使用
child\u index
方法,并使用
Time.now.to\u i
生成时间戳

如果您阅读了我在答案顶部引用的答案,所有这些都是有意义的:)

这方面的一些重要资源: