使用嵌套属性在一个模型中验证多个模型

Validation of multiple models in one, using Nested Atrributes

所以我尝试构建一个由两个模型的字段组成的表单。 不幸的是,验证只适用于其中之一,尽管它们是相同的。

所以总结一下:验证对两者都有效,但仅在第一个的情况下抛出错误和回滚。另外,我正在使用邪恶的表单向导gem。
我的模型是:
candidate.rb

class Candidate < ApplicationRecord
  belongs_to :user
  has_one :candidate_form
  has_one :employee_form
  accepts_nested_attributes_for :candidate_form
  accepts_nested_attributes_for :employee_form
end

candidate_form.rb

class CandidateForm < ApplicationRecord
  belongs_to :candidate
  validates_format_of :name, without: /\W/, allow_blank: true
end

employee_form.rb(可以看到,和candidate_form.rb一样)

class EmployeeForm < ApplicationRecord
  belongs_to :candidate
  validates_format_of :pesel, without: /\W/, allow_blank: true
end

控制器:

def show
    @candidate = current_user.candidate
    render_wizard
  end

  def update
    @candidate = current_user.candidate
    @candidate.attributes = candidate_params
    render_wizard @candidate
  end

private

  def candidate_params
    params.require(:candidate).permit(candidate_form_attributes: [:id, :name],
                                      employee_form_attributes: [:id, :pesel])
  end

我的表单结构

<%= form_for @candidate, url: wizard_path, method: "put" do |f| %>
    <%= f.fields_for :candidate_form do |cand| %>
        <%= cand.text_field :name %>
    <% end %>
    <%= f.fields_for :employee_form do |emp| %>
        <%= emp.text_field :pesel %>
    <% end %>
    <%= f.submit "NEXT" %>
<% end %>

最后一点说明什么不起作用:

哦,没关系。 :pesel 是数据库中的整数类型。将其更改为字符串可使一切正常运行。