RoR:form_for在页面底部打印活动记录?



我正在为我的团队创建一个非常基本的CMS,使他们能够更改页面标题和这种性质的东西。我有cms_pages和cms_pieces。cms_pages指示您将为哪个页面创建cms_pieces,因此cms_pieces belongs_to cms_pages。

从cms_pages索引页面,我正在创建页面,然后我单击这些页面以进入其显示页面。在显示页面上,我为cms_pieces创建了一个创建表单。

创建cms_pieces后,我使用 .each 方法循环遍历它们,它们以以下形式填充; 它们的名称作为标题,其值应用于输入元素中,这将允许我的团队根据需要进行更新。

这种cms_pieces形式的迭代给我带来了麻烦。请注意,这些cms_pieces更新表单在cms_pages的视图名称约定范围内。

我尝试了不同的 rails 表单助手来完成它,就像form_with一样,但需要的参数太少,才能像我需要的那样准确。也许我不完全了解如何使用它?从我的研究来看,这似乎是制作轨道形式的新的包罗万象的方法,但我遇到了局限性。

所以我研究了如何从cms_pages的角度将这种形式对准cms_pieces控制器,这就是我想出的。它可以工作,但它打印页面底部的每条cms_pieces记录都非常丑陋,丝毫不需要。

*请注意,这在我的"后端"命名空间中。

<%= @cms_pieces.each do |piece|%>
<div> Edit <%= piece.name %> </div>
<%= form_for(backend_cms_piece_path(piece), url: backend_cms_piece_path, :method => :patch) do |form| %>
<% if piece.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(piece.errors.count, "error") %> prohibited this cms_piece from being saved:</h2>
<ul>
<% piece.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :input %>
<%= form.text_field :input, value: piece.input  %>
</div>
<div class="field" style="visibility: hidden; position: absolute; bottom: 0px; right: 0px; z-index: -100;">
<%= form.label :cms_pages_id %>
<%= form.text_field :cms_pages_id, value: params[:id] %> 
</div>
<div class="field" style="visibility: hidden; position: absolute; bottom: 0px; right: 0px; z-index: -100;">
<%= form.label :id %>
<%= form.text_field :id, value: piece.id %>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
<% end %> 

然后它在底部打印这个

[ # CmsPiece id: 13, 名称: "横幅标题", 输入: "横幅的东西?!", cms_pages_id: 12, created_at: "2019-08-23 02:24:24", updated_at: "2019-08-23 03:00:13", #CmsPiece id: 14, 名称: "横幅子文本", 输入: "子短信在这里", cms_pages_id: 12, created_at: "2019-08-23 03:05:17">

, updated_at: "2019-08-23 03:05:17" ]

有没有人知道我的表单有什么问题,它在我的 html 中吐出这个???甚至引导我到一个更优雅的表单助手?我觉得我在形式论证中所拥有的东西是多余的,但这是我找到的完成我需要的东西的唯一方法。

我这样设置表单的原因是,我可以将page_id和件 ID 传递给件控制器以正确填写件数数据。我意识到将部分传递到 form 参数中应该保持更新方法的直截了当,但它没有被传递,所以我通过仅使用表单字段提交它来解决这个问题。

在第一行代码中,您使用了<%= >.所以它会循环打印每条记录,请使用<% >而不是<%= >

从迭代语句中删除=将解决此问题。