我有一个模型,其中很小一部分对象将具有相当大的描述性文本。为了保持我的数据库在某种程度上正常化,我想将这个描述性文本提取到一个单独的模型,但是我在ActiveAdmin中创建一个合理的工作流程时遇到了麻烦。
我的模特看起来像这样:
class Person < ActiveRecord::Base
has_one :long_description
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对象。
任何具有比我更好的ActiveAdmin技能的人都知道如何实现这个目标吗?
答案 0 :(得分:2)
您使用的是accepts_nested_attributes_for :long_description
吗?如果是这样,您可以添加:reject_if
选项:
class Person < ActiveRecord::Base
has_one :long_description
accepts_nested_attributes_for :long_description, reject_if: proc { |attrs| attrs['text'].blank? }
end
请注意,这是一个Rails的东西,而不是ActiveAdmin的东西,所以如果缺少该属性,它将简单地跳过赋值和更新/创建嵌套对象。
更多信息:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html