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

Rails 4嵌套表单在编辑中显示,但不在模态中显示

是指在Rails 4框架中,如何实现在编辑页面中显示嵌套表单,但不以模态框的形式展示。

在Rails 4中,可以通过使用嵌套表单和部分视图来实现这个需求。以下是一个完善且全面的答案:

  1. 概念: 嵌套表单是指在一个表单中包含另一个表单的情况。在Rails中,可以使用嵌套属性来实现这个功能。
  2. 分类: 嵌套表单可以分为一对一嵌套和一对多嵌套两种情况。一对一嵌套是指一个表单中包含一个其他表单的情况,而一对多嵌套是指一个表单中包含多个其他表单的情况。
  3. 优势: 嵌套表单可以简化数据的输入和管理,提高用户体验。同时,通过嵌套表单可以实现数据的关联和级联保存,减少数据库操作的复杂性。
  4. 应用场景: 嵌套表单适用于需要在一个页面上同时编辑多个相关联的模型的情况。例如,一个文章编辑页面中可以同时编辑文章的标题、内容和标签。
  5. 推荐的腾讯云相关产品和产品介绍链接地址: 腾讯云提供了丰富的云计算产品和服务,包括云服务器、云数据库、云存储等。具体推荐的产品和介绍链接地址可以根据实际需求进行选择。

在Rails 4中实现嵌套表单的步骤如下:

  1. 在模型中定义关联关系: 在主模型中使用accepts_nested_attributes_for方法来接受嵌套的属性,并在模型中定义关联关系。
  2. 在控制器中设置参数: 在控制器中使用permit方法来允许嵌套属性的参数传递。
  3. 在视图中显示嵌套表单: 在视图中使用fields_for方法来显示嵌套表单的字段,并使用link_to_add_fields方法来添加新的嵌套表单。
  4. 在路由中定义资源: 在路由文件中定义资源的嵌套关系,以便正确处理嵌套表单的提交。

以下是一个示例代码,演示如何在Rails 4中实现嵌套表单的编辑显示:

代码语言:txt
复制
# 模型定义
class Article < ActiveRecord::Base
  has_many :tags
  accepts_nested_attributes_for :tags, allow_destroy: true
end

class Tag < ActiveRecord::Base
  belongs_to :article
end

# 控制器定义
class ArticlesController < ApplicationController
  def edit
    @article = Article.find(params[:id])
  end

  def update
    @article = Article.find(params[:id])
    if @article.update(article_params)
      redirect_to @article
    else
      render 'edit'
    end
  end

  private
    def article_params
      params.require(:article).permit(:title, :content, tags_attributes: [:id, :name, :_destroy])
    end
end

# 视图定义
<%= form_for @article do |f| %>
  <%= f.label :title %>
  <%= f.text_field :title %>

  <%= f.label :content %>
  <%= f.text_area :content %>

  <%= f.fields_for :tags do |tag_fields| %>
    <%= tag_fields.label :name %>
    <%= tag_fields.text_field :name %>
    <%= tag_fields.check_box :_destroy %>
    <%= tag_fields.label :_destroy, 'Remove' %>
  <% end %>

  <%= link_to_add_fields 'Add Tag', f, :tags %>

  <%= f.submit %>
<% end %>

# JavaScript定义
function removeFields(link) {
  $(link).prev('input[type=hidden]').val('1');
  $(link).closest('.fields').hide();
}

function addFields(link, association, content) {
  var new_id = new Date().getTime();
  var regexp = new RegExp('new_' + association, 'g');
  $(link).before(content.replace(regexp, new_id));
}

$(document).on('click', '.remove_fields', function(e) {
  e.preventDefault();
  removeFields(this);
});

$(document).on('click', '.add_fields', function(e) {
  e.preventDefault();
  var association = $(this).data('association');
  var content = $(this).data('content');
  addFields(this, association, content);
});

通过以上步骤,就可以在Rails 4中实现嵌套表单的编辑显示,而不以模态框的形式展示。

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

相关·内容

  • 建模与表单的动态化设计

    市面上有不少用于推进某些业务的表单设计器,例如轻流、简道云等,它们的理念是用一个很小的表单和流程,解决企业的细小业务,可以理解为问卷收集基础上的流转能力。但是,对于开发者而言,往往需要面临比这类细小业务复杂的多得多的业务流程,以及流程节点上的表单。我在该领域持续研究了三年多,这些研究有静态的,也有动态的。所有动态化,有两个角度,从产品运营人员的角度,处于流程中的表单可能随时需要调整一些策略,例如字段的限制,或者某些字段的增删;从开发人员的角度,我们不能用代码限定死表单及其囊括各方面的内容,而是需要在前后端配合下,异步的生成表单的界面、交互、业务逻辑等等。本文将梳理我的设计思路。

    01
    领券