是指在Rails 4框架中,如何实现在编辑页面中显示嵌套表单,但不以模态框的形式展示。
在Rails 4中,可以通过使用嵌套表单和部分视图来实现这个需求。以下是一个完善且全面的答案:
在Rails 4中实现嵌套表单的步骤如下:
accepts_nested_attributes_for
方法来接受嵌套的属性,并在模型中定义关联关系。permit
方法来允许嵌套属性的参数传递。fields_for
方法来显示嵌套表单的字段,并使用link_to_add_fields
方法来添加新的嵌套表单。以下是一个示例代码,演示如何在Rails 4中实现嵌套表单的编辑显示:
# 模型定义
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中实现嵌套表单的编辑显示,而不以模态框的形式展示。
领取专属 10元无门槛券
手把手带您无忧上云