首页 > 解决方案 > RoR:form_for 正在我页面底部打印活动记录?

问题描述

我正在为我的团队创建一个非常基本的 CMS,以使他们能够更改页面标题和类似性质的东西。我有 cms_pages 和 cms_pieces。cms_pages 指示您将为哪个页面创建 cms_pieces,因此 cms_pieces 属于 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, name: "banner title", input: "Banner Stuff?!", cms_pages_id: 12, created_at: "2019-08-23 02:24:24", updated_at: "2019-08-23 03:00:13", #CmsPiece id: 14, name: "banner sub text", input: "Sub Texting up in here", cms_pages_id: 12, created_at: "2019-08-23 03:05:17",更新时间:“2019-08-23 03:05:17”]

有谁知道我的表单有什么问题,它在我的 html 中吐出这个???或者甚至引导我使用更优雅的表单助手?我觉得我在我的表格中的论点是多余的,但这是我找到完成我需要的唯一方法。

我这样设置表单的原因是我可以将 page_id 和片段 id 传递给片段控制器以正确填写片段数据。我意识到将片段传递到表单参数应该保持更新方法直接但它没有被传递,所以我通过表单字段提交它来解决它。

标签: ruby-on-railsrubyformsform-for

解决方案


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

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


推荐阅读