Cocoon gem: 保护嵌套关联模型

Cocoon gem: protect nested associated model

我的 Rails 4.2 应用程序中有 3 个模型:

class Vintage < ActiveRecord::Base

  has_many :grapers, dependent: :destroy
  has_many :grapes, through: :grapers  

  attr_accessible :grapers_attributes
  accepts_nested_attributes_for :grapers, reject_if: :all_blank, allow_destroy: true
  accepts_nested_attributes_for :grapes 

end


class Grape < ActiveRecord::Base

  has_many :grapers
  has_many :vintages, through: :grapers 

end


class Graper < ActiveRecord::Base

  belongs_to :vintage
  belongs_to :grape

  attr_accessible :grape_attributes
  accepts_nested_attributes_for :grape, reject_if: :all_blank
  attr_accessor :name

end

我的带有嵌套属性的茧形表单运行良好。 我的 uniq 问题是我不想让 create/update 葡萄通过嵌套形式。

我的 vintage 拥有许多与 grapes 相关的 grapers。我不希望应用程序可以通过此表单 create/update 葡萄。我有另一种形式来添加葡萄。 我只想使用嵌套形式通过葡萄种植者将葡萄附加到年份。

我错过了什么?如何禁止应用通过嵌套形式编辑葡萄?

实际上,例如,如果我输入 "Merlo" 并且没有点击 "Merlot" 行,应用程序将在我的数据库中将 "Merlot" 更改为 "Merlo"!

编辑:我认为的代码:

<%= link_to_add_association 'Add grape', f, :grapers, 'data-association-insertion-node' => "#vintage-grapes ol", 'data-association-insertion-method' => "append", :wrap_object => Proc.new {|graper| graper.build_grape; graper }, :partial => '/admin/vintages/graper_field' %>

如果您不想创建 grapes,那么您应该删除。

accepts_nested_attributes_for :grapes 

您的茧形表格应该生成 graper 表格,您可以从中选择但不能编辑 grapes

此外,在您的消毒剂中不允许 grapes_parameters