ActiveAdmin 中的可选嵌套 has_one
Optional Nested has_one in ActiveAdmin
我在 Order 和 ShippingAddress 之间有一对一的关系。订单并不总是有送货地址。 AA 代码:
f.inputs "Shipping address", for: [:shipping_address, f.object.shipping_address || ShippingAddress.new] do |shipping|
shipping.input :firstname
shipping.input :lastname
shipping.input :address1
shipping.input :address2
shipping.input :phone
shipping.input :country
shipping.input :state
shipping.input :city
shipping.input :zip
end
我的问题是在编辑订单时。它总是尝试创建一个新的送货地址并验证其字段 - 这些字段为空,因此在验证期间失败。除非填写了字段,否则我不想在编辑订单时创建送货地址。
您的问题不在于 AA,而在于 Rails。
你要用的是reject_if
:
has_one :shipping_address,
reject_if: -> { |attrs| attrs[:firstname].blank? } # check any attributes you want
这样可以确保 Rails 不会尝试创建不需要的关联。
这是您需要的:
accepts_nested_attributes_for :shipping_address, reject_if: proc { |attrs| attrs[:firstname].blank? }
我在 Order 和 ShippingAddress 之间有一对一的关系。订单并不总是有送货地址。 AA 代码:
f.inputs "Shipping address", for: [:shipping_address, f.object.shipping_address || ShippingAddress.new] do |shipping|
shipping.input :firstname
shipping.input :lastname
shipping.input :address1
shipping.input :address2
shipping.input :phone
shipping.input :country
shipping.input :state
shipping.input :city
shipping.input :zip
end
我的问题是在编辑订单时。它总是尝试创建一个新的送货地址并验证其字段 - 这些字段为空,因此在验证期间失败。除非填写了字段,否则我不想在编辑订单时创建送货地址。
您的问题不在于 AA,而在于 Rails。
你要用的是reject_if
:
has_one :shipping_address,
reject_if: -> { |attrs| attrs[:firstname].blank? } # check any attributes you want
这样可以确保 Rails 不会尝试创建不需要的关联。
这是您需要的:
accepts_nested_attributes_for :shipping_address, reject_if: proc { |attrs| attrs[:firstname].blank? }