Cocoon gem:保护嵌套关联模型

时间:2016-03-09 13:22:12

标签: ruby-on-rails nested-forms cocoon-gem

我的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

我的带有嵌套属性的cocoon表单效果很好。 我的uniq问题是我不想允许通过嵌套表单创建/更新葡萄。

我的年份拥有许多与 grape 相关联的 grapers 。我不希望应用程序可以通过此表单创建/更新葡萄。我有另一种形式添加葡萄。 我只是想用嵌套的形式通过grapers将葡萄贴在葡萄酒上。

我错过了什么?如何禁止应用程序通过嵌套表单编辑葡萄?

实际上,例如,如果我输入“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' %>

1 个答案:

答案 0 :(得分:1)

如果您不想创建grapes,则应删除。

accepts_nested_attributes_for :grapes 

您的cocoon表单应生成graper表单,您可以从中选择但不能编辑grapes

您的洗手液中也不允许grapes_parameters