首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在一个页面的不同部分构建几个对象吗?

我可以在一个页面的不同部分构建几个对象吗?
EN

Stack Overflow用户
提问于 2019-07-10 10:45:37
回答 1查看 29关注 0票数 0

我有一个Page模型,它有很多TextBlock

代码语言:javascript
复制
class Page < ApplicationRecord
  has_many :text_blocks, as: :textable, dependent: :destroy
  accepts_nested_attributes_for :text_blocks
end

在可以编辑页面的表单中,我必须在表单的上部显示3个文本块,在表单的下部显示3个文本块。这是我认为的密码..。

上文本块:

代码语言:javascript
复制
<%= render 'shared/admin/form-fields/text-blocks-form', f: f, number: 3, value: true %>

下文本块:

代码语言:javascript
复制
<%= render 'shared/admin/form-fields/text-blocks-form', f: f, number: 2, value: false %>

下面是text-blocks-form部分:

代码语言:javascript
复制
<div class="form-group">
  <div class="row">
    <div class="col-lg-12 text-blocks">
      <div class="row">
        <% number.times { f.object.text_blocks.where(upper_position: value).build } unless f.object.text_blocks.where(upper_position: value).any? %>
        <%= f.fields_for :text_blocks do |input| %>
          <div class="<%= "col-lg-#{cells(number)}" %>">
            <%= render 'shared/admin/form-fields/text-blocks-fields', f: input, value: value %>
          </div>
        <% end %>
      </div>
    </div>
  </div>
</div>

上面的文本块是按预期构建的,有3个块,但在表单的下部,只有5个块而不是2个块。看起来,它只是添加了3+ 2。有什么方法可以像上面描述的那样使用build文本块吗?先谢了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-10 11:37:01

我可以很容易地解释你为什么会有这个问题,也许用好的方法来解决这个问题就不那么容易了。

原因是,在第一次运行中,您创建了三个嵌套项(在关联上),然后使用f.fields_for :text_blocks对它们进行迭代,在第二次运行中,您又添加了两个项,然后迭代f.fields_for :text_blocks将遍历所有五个创建的块。

一个简单的解决方法是按以下方式更改您的观点:

代码语言:javascript
复制
<div class="form-group">
  <div class="row">
    <div class="col-lg-12 text-blocks">
      <div class="row">
        <% number.times { f.object.text_blocks.where(upper_position: value).build } unless f.object.text_blocks.where(upper_position: value).any? %>
        <%= f.fields_for :text_blocks do |input| %>
          <%- if input.object.upper_position == value %>
            <div class="<%= "col-lg-#{cells(number)}" %>">
              <%= render 'shared/admin/form-fields/text-blocks-fields', f: input, value: value %>
            </div>
          <% end %>
        <% end %>
      </div>
    </div>
  </div>
</div>

如果您总是有5个块(顶部3个,下面2个),我还会考虑添加一个positionorder列,允许文本块在保存后以正确的位置重新呈现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56969041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档