Ruby on rails 不仅仅是一个简单的嵌套形式
campaign.rbRuby 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活动
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
生成时间戳
如果您阅读了我在答案顶部引用的答案,所有这些都是有意义的:)
这方面的一些重要资源: