首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法在ROR表单中创建数量不定的嵌套资源?

在ROR(Ruby on Rails)表单中创建数量不定的嵌套资源可以通过使用动态表单字段和嵌套属性来实现。

动态表单字段是指根据用户的输入动态生成表单字段。在ROR中,可以使用JavaScript来实现动态添加和删除表单字段的功能。例如,可以使用JavaScript监听一个按钮的点击事件,在点击按钮时动态地添加一个新的表单字段。

嵌套属性是指在表单中嵌套提交相关联的资源。在ROR中,可以使用accepts_nested_attributes_for方法来实现嵌套属性的功能。通过在模型中设置accepts_nested_attributes_for,可以在表单中提交相关联的资源。

下面是一个示例代码,演示如何在ROR表单中创建数量不定的嵌套资源:

  1. 首先,在模型中设置嵌套属性:
代码语言:ruby
复制
class ParentModel < ApplicationRecord
  has_many :child_models
  accepts_nested_attributes_for :child_models, allow_destroy: true
end
  1. 在控制器中,创建一个新的父模型实例,并建立与子模型的关联:
代码语言:ruby
复制
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
  1. 在视图中,使用动态表单字段和嵌套属性来创建表单:
代码语言:erb
复制
<%= 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表单中创建数量不定的嵌套资源了。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券