在rails中相同模型的新视图中附加表单部分

Posted

技术标签:

【中文标题】在rails中相同模型的新视图中附加表单部分【英文标题】:Append form partial in the new view of the same model in rails 【发布时间】:2013-01-23 15:53:32 【问题描述】:

我想使用相同的模型在一个视图 (new.erb.html) 中通过一次提交一次创建更多记录。

例如,我有一个名为 Report 的模型,其中包含一些字段,例如标题、描述和日期

当我单击添加按钮时,如何多次渲染相同的表单?我认为这不是嵌套模型的问题,因为始终是相同的模型动作。 谢谢

【问题讨论】:

嗯,也许我没有很好地理解你的问题,但你到底想做什么?你使用 js 来追加那些表单吗? 是的,我想使用 jquery,并且我想管理数组以创建相同模型的控制器操作 因此,您可以使用 JQuery 的追加添加任意数量的表单,并且它们不必不同:只需使用 Khustochka 的提示'bout model[][name] 名称即可。 【参考方案1】:

你可以这样做(我自己没有测试过代码):

哈姆:

.model
  %input:name => "model[][name]"
  %input:name => "model[][desc]"
  %input:name => "model[][date]"
.container
%button.add-model

js:

$('.add-model').click(function()
  $('.model').clone().first().appendTo('.container');
)

控制器:

def save
   params[:model].each do |props|
     Model.create(props)
   end
end

【讨论】:

好的,谢谢,我正在研究这个解决方案,但我不使用haml,我使用支持SimpleForm gem 的html,你知道如何使用格式模型更改输入名称[][姓名]? 我不确定 SimpleForm 是否有帮手来制作像“model[][name]”这样的名称。你能明确地指定名称吗?类似 f.input :name, :name => "model[][name]"? 是的,它适用于 :input_html => "model[][name]" 没有帮助程序,现在 javascript 工作正常但创建操作不起作用,它只保存最后的输入 这里开始调试:看看 params[:model] 中到底有什么,有多少元素?您必须确保整个表单数据都到达控制器。您也可以在浏览器中使用网络控制台。【参考方案2】:

我所做的是使用 JavaScript (jQuery) - 在页面加载时,我将唯一呈现的表单保存到 JS 变量中(实际上不是表单,而是其中的输入),然后单击“添加更多”链接附加更多输入进入表格。

要一次保存多个对象,您将需要手工输入名称(类似于 model[][name] 以发送值数组),以及接受数组的控制器。

【讨论】:

以上是关于在rails中相同模型的新视图中附加表单部分的主要内容,如果未能解决你的问题,请参考以下文章

Rails - 相同的模型/控制器,但不同的视图

将附加字段动态添加到 rails 表单

CREATE 上 DRF 中的多部分图像上传

在rails 2.3+中测试(rspec)嵌套模型部分

从rails中的控制器渲染部分

使用 ActiveStorage 将 Cloudinary 图像附加到 Rails 模型