保存前的 ActiveAdmin 表单验证

ActiveAdmin form validation before save

我有来自一个模型 status_history 的表单字段,我将其包含在我的 member 编辑中。我想这样做,如果 status_history 的字段为空,则不会保存。当前,当我保存 members 编辑时,它会将空白项保存到 status_history

我的 member 表单如下所示

form(:html => { :multipart => true }) do |f|
    f.semantic_errors *f.object.errors.keys
    columns do
      column do
        ...
      end
      column do
        f.inputs "Status" do
          f.semantic_fields_for :status_histories, StatusHistory.new do |sh|
            sh.inputs :class => "" do
              sh.input :status, as: :select, collection: {Active: "active", Inactive: "inactive", Separated: "separated"}
              sh.input :date, :as => :datepicker
              sh.input :reason
            end
          end
          table_for member.status_histories do
            column "status" do |status_histories|
              status_histories.status
            end
            column "date" do |status_histories|
              status_histories.date
            end
            column "reason" do |status_histories|
              status_histories.reason
            end
          end
        end

...
      end
    end
    f.actions
  end

models/status_histories

class StatusHistory < ActiveRecord::Base
  belongs_to :member

  STATUS_TYPES = [ "active", "inactive", "separated" ]
  validates :status, inclusion: STATUS_TYPES
  validates :date, :presence => true
  validates :reason, :presence => true
end

即使添加一个按钮来切换 semantic_fields_for 也可以,但目前如果我将它们留空,我会收到 validates 错误。

我将如何重写保存方法以检查状态和日期是否存在,如果存在则保存 status_history,如果不存在,则不保存 status_history 但保存 member 字段?

试试这个:

Member ActiveRecord 模型中

accept_nested_attributes_for :status_histories, reject_if: :all_blank

http://apidock.com/rails/ActiveRecord/NestedAttributes/ClassMethods/accepts_nested_attributes_for