保存前的 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
我有来自一个模型 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