在 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 元素。 所以只是根据它是哪种策略来渲染不同的部分? 对不起,我还是有点糊涂。为了弄清楚我遇到麻烦的地方,上面的代码示例中的内容包含在<div class="tactics">
部分中。目前,它只是连续渲染所有五个嵌套表单。例如,我希望能够只渲染其中一个或两个,然后在渲染其余部分之前执行一些自定义 HTML。我忽略了一些简单的事情吗?以上是关于在 Ruby on Rails 4.2 中使用 Cocoon gem 嵌套表单的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails:运行 rake 命令时出现错误消息