ActiveAdmin中的可选嵌套has_one

时间:2015-10-07 14:31:34

标签: ruby-on-rails activeadmin

我在Order和ShippingAddress之间有一对一的关系。并非总是订单具有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

我的问题是编辑订单时。它总是尝试创建一个新的送货地址并验证其字段 - 这些字段为空,因此在验证期间失败。我不想在编辑订单时创建送货地址,除非填写了字段。

2 个答案:

答案 0 :(得分:1)

你的问题不是AA,而是Rails。

您要使用的是reject_if

has_one :shipping_address,
  reject_if: -> { |attrs| attrs[:firstname].blank? } # check any attributes you want

通过这种方式,您可以确保Rails不会尝试创建不需要的关联。

答案 1 :(得分:1)

这就是你需要的:

  accepts_nested_attributes_for :shipping_address, reject_if: proc { |attrs| attrs[:firstname].blank? }