我的问题是如何避免在嵌套的 rails 表单上保存空记录的边缘情况。我有一个简单has_many
的 ,用户最多可以有 5 个职位。
# user.rb
has_many :job_titles
validates_length_of :job_titles, maximum: 5
accepts_nested_attributes_for :job_titles,
allow_destroy: true,
:reject_if => proc { |att| att[:name].blank? }
# job_titles.rb
belongs_to :user
validates_associated :user
proc 应该删除所有空白,但无论如何都会创建它们(!),因为我在 users_controller 中有这个,用于确保视图中始终显示 5 个表单字段:
# users_controller.rb
num_job_titles = @user.job_titles.count
(5-num_job_titles).times { @user.job_titles.build }
有了这个,即使在提交表单之前,空白仍然出现在数据库中,因为之前的代码build
是那些空白记录,并且模型验证似乎出于某种原因允许它 - 我没想到会这样。
问题
如何确保为 5 个不同的关联记录(职位)显示 5 个字段,并确保空白职位不作为记录保存到数据库中?