【问题标题】:Building Form Based On an Association in Rails基于 Rails 中的关联构建表单
【发布时间】:2013-07-21 17:07:42
【问题描述】:

我对 Rails 很陌生,在整理一个用于学习的简单页面时遇到了一些问题,我希望有人可以对修复或更好的方法提出一些建议。

基本上,我有便签本的概念。每个垫有_many 任务和has_many 笔记。在pad的展示中,我想要两个独立的表格。一种用于添加任务,一种用于添加注释。问题是,我像这样构建表单:

<%= form_for([@pad, @pad.tasks.build]) do |f| %>
    <%= f.text_field :text %> <%= f.submit %>
<% end %>

现在,由于我调用了 .build,当我稍后调用下面的代码来呈现任务时,它总是会在列表中呈现一个额外的空记录。

<ul>
    <%= render @pad.tasks %>
</ul>

我考虑过使用嵌套表单,但这似乎需要我使用 PadsController::Update 而不是 TasksController:Create 像我想要的那样。

在这种情况下,合适的方法是什么?对 Rails 如此陌生(昨天开始),恐怕我错过了一些明显的东西。

编辑:我将源代码添加到 github 存储库。正如我所说,这对我来说只是一个学习项目。 https://github.com/douglinley/scratchpad

【问题讨论】:

    标签: ruby-on-rails forms associations ruby-on-rails-4


    【解决方案1】:

    如果您只是想要一个新任务而不将其添加到@pad.tasks 集合中,我相信您可以只使用@pad.tasks.new 而不是@pad.tasks.build(确实将其添加到集合中)。

    有关构建与新建的更多信息,请查看 Build vs new in Rails 3

    【讨论】:

    • 感谢您的回复。根据那篇文章,看起来 Build 和 New 现在几乎相同(3.2.3 后),它们都将新记录添加到集合中。这是我要避免的。
    【解决方案2】:

    所以,这比我想象的要容易得多。我没有在集合上调用 new,而是为表单创建了一个新对象。示例如下:

    <%= form_for([@pad, Task.new]) do |f| %>
        <%= f.text_field :text %> <%= f.submit %>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多