在ROR(Ruby on Rails)表单中创建数量不定的嵌套资源可以通过使用动态表单字段和嵌套属性来实现。
动态表单字段是指根据用户的输入动态生成表单字段。在ROR中,可以使用JavaScript来实现动态添加和删除表单字段的功能。例如,可以使用JavaScript监听一个按钮的点击事件,在点击按钮时动态地添加一个新的表单字段。
嵌套属性是指在表单中嵌套提交相关联的资源。在ROR中,可以使用accepts_nested_attributes_for
方法来实现嵌套属性的功能。通过在模型中设置accepts_nested_attributes_for
,可以在表单中提交相关联的资源。
下面是一个示例代码,演示如何在ROR表单中创建数量不定的嵌套资源:
class ParentModel < ApplicationRecord
has_many :child_models
accepts_nested_attributes_for :child_models, allow_destroy: true
end
class ParentModelsController < ApplicationController
def new
@parent_model = ParentModel.new
@parent_model.child_models.build
end
def create
@parent_model = ParentModel.new(parent_model_params)
if @parent_model.save
# 保存成功的处理逻辑
else
# 保存失败的处理逻辑
end
end
private
def parent_model_params
params.require(:parent_model).permit(:attribute1, :attribute2, child_models_attributes: [:id, :child_attribute1, :child_attribute2, :_destroy])
end
end
<%= form_for @parent_model do |f| %>
<%= f.text_field :attribute1 %>
<%= f.text_field :attribute2 %>
<%= f.fields_for :child_models do |child_form| %>
<%= child_form.text_field :child_attribute1 %>
<%= child_form.text_field :child_attribute2 %>
<%= child_form.check_box :_destroy, class: 'remove-child' %>
<% end %>
<div class="actions">
<%= f.button 'Add Child', class: 'add-child' %>
<%= f.submit 'Submit' %>
</div>
<% end %>
<script>
$(document).ready(function() {
$('.add-child').click(function(e) {
e.preventDefault();
var childFields = $('.fields').last().clone();
childFields.find('input').val('');
childFields.insertAfter($('.fields').last());
});
$('.remove-child').click(function() {
$(this).closest('.fields').remove();
});
});
</script>
在上述代码中,fields_for
方法用于创建嵌套的子模型表单字段。通过JavaScript,可以实现点击"Add Child"按钮时动态添加一个新的子模型表单字段,并且每个子模型表单字段都有一个"Remove"复选框,可以选择删除该子模型。
这样,用户就可以在ROR表单中创建数量不定的嵌套资源了。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云