在 Ruby on Rails 4.2 中使用 Cocoon gem 嵌套表单

Posted

技术标签:

【中文标题】在 Ruby on Rails 4.2 中使用 Cocoon gem 嵌套表单【英文标题】:Nested forms using the Cocoon gem in Ruby on Rails 4.2 【发布时间】:2015-10-27 07:25:00 【问题描述】:

我正在使用 Rails 4.2 构建一个 Web 应用程序,并且我有一个名为 Strategy 的模型,它与 Tactic 模型具有 has_many 关系。

要为策略创建一个视图,我需要在表单上有许多嵌套的策略。我一直在使用 Cocoon gem 来开发这个视图。

到目前为止,我已经能够让表单在大多数情况下正常工作,但问题是我想向我的 Tactic 模型添加一个 Type 属性。

对于给定的策略,我想要一种给定类型的 3 个策略和另一种的 2 个模型。

问题是在渲染我的视图时,所有五个模型都按顺序列出,没有任何空间可以在它们周围放置我自己的 html 代码。

有没有一种简单的方法来区分哪些是渲染的?现在,我的看法如下...

<%= form_for @strategy do |f| %>
    <div class="strategy">
        <%= f.label :name %>
        <%= f.text_field :name %>
    </div>

    <div class="tactics">
        <%= f.fields_for :tactics do |i| %>
            <%= render 'tactics_fields', f: i %>
        <% end %>
    </div>

    <div class="buttons">
        <%= f.button "Save Strategy", class: 'button' %>
    </div>
<% end %>

如果有人可以提供任何建议,将不胜感激。

【问题讨论】:

【参考方案1】:

您是否希望呈现表单,以便每个策略在其下方准确列出 5 个战术,其中 3 个属于一种类型,2 个属于另一种类型?

如果是这样,您可以在控制器中执行此操作:

5.times do
  tactic = @strategy.tactics.build
  tactic.tactic_type = 'tactic_type'
end

另外,请注意使用名为type 的属性不是一个好主意。请改用tactic_type 之类的东西。

【讨论】:

不完全。我的控制器中已经有 5x @strategy.tactics.build,运行良好。问题是,当我尝试在视图中实现五个嵌套的“策略”表单时,它们都使用局部视图助手放入。我只是想让它们中的每一个一次呈现一个,这样我就可以在一些嵌套表单周围放置其他 HTML 元素。 所以只是根据它是哪种策略来渲染不同的部分? 对不起,我还是有点糊涂。为了弄清楚我遇到麻烦的地方,上面的代码示例中的内容包含在&lt;div class="tactics"&gt; 部分中。目前,它只是连续渲染所有五个嵌套表单。例如,我希望能够只渲染其中一个或两个,然后在渲染其余部分之前执行一些自定义 HTML。我忽略了一些简单的事情吗?

以上是关于在 Ruby on Rails 4.2 中使用 Cocoon gem 嵌套表单的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:运行 rake 命令时出现错误消息

Ruby on Rails - 回形针回滚事务

如何在 Windows 操作系统的 Ruby on Rails 应用程序中使用 Redis?

Ruby on Rails 学习六Ruby 类 的入门

ruby on rails on windows

Ruby on Rails安装错误端口53