如何对整数字段正确使用`accepts_nested_attributes_for`和`allow_destroy`?

时间:2017-06-29 01:57:01

标签: ruby-on-rails

我使用accepts_nested_attributes_for进行整数输入,而不是复选框。我知道我可以在参数中传递_destroy(通常用复选框切换),allow_destroy: true会破坏对象。

根据APIallow_destroy只取一个布尔值,而不是一个块。

如果参数的值为0,我将如何销毁子对象?

# event.rb
class Event
  accepts_nested_attributes_for :demands, allow_destroy: true
end

# _form.html.haml
= simple_form_for @event do |f|
  = f.input :name
  = f.simple_fields_for :demands do |builder|
    = builder.input :required, label: builder.object.role.name
  = f.submit

如果将_destroy参数设置为true,那么将required传递给0的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我不知道这是否是" Rails Way"做事,但我用这个解决了它:

class Event
  before_save :destroy_demands_if_zero
  accepts_nested_attributes_for :demands

  private

  def destroy_demands_if_zero
    demands.select{ |demand| demand.required.zero? }.map(&:mark_for_destruction)
  end
end

关键是#mark_for_destruction

现在,当一个事件被保存时,它将标记在保存父(事件)时删除零要求的任何chidlren(需求)。