我使用accepts_nested_attributes_for
进行整数输入,而不是复选框。我知道我可以在参数中传递_destroy
(通常用复选框切换),allow_destroy: true
会破坏对象。
根据API,allow_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
的最佳方法是什么?
答案 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
现在,当一个事件被保存时,它将标记在保存父(事件)时删除零要求的任何chidlren(需求)。