我有一个模型,其中很小一部分对象将具有相当大的描述性文本。为了保持我的数据库在某种程度上正常化,我想将这个描述性文本提取到一个单独的模型,但是我在ActiveAdmin中创建一个合理的工作流程时遇到了麻烦。
我的模特看起来像这样:
class Person < ActiveRecord::Base
has_one :long_description
accepts_nested_attributes_for :long_description, reject_if: proc { |attrs| attrs['text'].blank? }
end
class LongDescription < ActiveRecord::Base
attr_accessible :text, :person_id
belongs_to :person
validates :text, presence: true
end
目前我已经创建了一个用于编辑Person模型的表单,看起来有点像这样:
form do |f|
...
f.inputs :for => [
:long_description,
f.object.long_description || LongDescription.new
] do |ld_f|
ld_f.input :text
end
f.actions
end
这适用于添加/编辑LongDescription对象,如果没有输入文本,它可以验证/创建LongDescription对象。
我想要实现的是还能够删除LongDescription对象,例如,如果text
属性再次设置为空字符串/ nil。
任何拥有比我更好的Rails或ActiveAdmin技能的人都知道如何实现这一目标?
答案 0 :(得分:1)
这似乎是一个非常不寻常的架构决策,但实现非常简单:
class LongDescription < ActiveRecord::Base
validates_presence_of :text, on: :create
after_save do
destroy if text.blank?
end
end