防止Cocoon加载存储的对象

时间:2015-12-14 22:24:13

标签: ruby-on-rails ruby-on-rails-4 nested-attributes cocoon-gem

上下文:

我有一个页面,其中有一张人的表格。我想使用cocoon来创建一个可以称为“快速添加”功能的内容。听起来很简单,对吧?

The Catch:

由于超出此问题范围的原因,我希望能够使用此cocoon界面添加人员。我不想编辑已存在的人,或删除它们,或类似的东西。我甚至不想要茧加载它们。 (我知道,我知道,这是一个奇怪的想法,对吗?)

问题:

这是我应该使用cocoon的东西,还是我最好只编写自己的javascript来添加/删除这些“快速添加”字段?如果值得使用cocoon,我该如何实现它以便不从数据库加载已存在的人?

提前致谢。

1 个答案:

答案 0 :(得分:1)

Cocoon不负责加载您的关联。您需要做的就是省略cocoon docs中建议的fields_for部分:

= form_for @project do |f|
  .field
    = f.label :name
    %br
    = f.text_field :name
  .field
    = f.label :description
    %br
    = f.text_field :description
  %h3 Tasks
  #tasks
    -# Two lines below are responsible for displying already saved models. Just get rid of them.
    =# f.fields_for :tasks do |task|
      =# render 'task_fields', f: task
    .links
      = link_to_add_association 'add task', f, :tasks
  = f.submit

最终,您可能希望页面在验证错误时保留表单中新插入的记录。在这种情况下,fields_for接受第二个参数来指定要呈现的记录:

= f.fields_for :tasks, f.object.tasks.select(&:new_record?) do |task|
  = render 'task_fields', f: task