Проверка нескольких моделей в одной с использованием вложенных атрибутов - PullRequest
0 голосов
/ 19 февраля 2020

Итак, я попытался построить форму, состоящую из полей из двух моделей. К сожалению, проверка работает только для одного из них, несмотря на то, что они одинаковы.

  • Если в первом поле есть белый знак, консоль показывает красный «откат», а в представлении отображается ошибка.
  • Если во втором поле есть белый знак, все идет как обычно, следующая страница отображается, ошибки не отображается, ДА значение не сохраняется.

Итак, для суммирования: проверка работает на обоих, но выдает ошибки и откаты только в случае первого. Кроме того, я использую драгоценный камень мастера злой формы.
Мои модели:
candid.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

candid_form.rb

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

employee_form.rb ( как вы можете видеть, это то же самое, что кандидат_форма.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 %>

Последнее уточнение, что не 't works:

  • "Имя с пробелом" - строка, подобная этой, в поле: имя предотвращает сохранение формы, выдает ошибку, обеспечивает откат
  • "Pesel witha пробел "- строка, подобная этой, в поле: pesel НЕ препятствует сохранению формы (только это поле не сохраняется) и откат не происходит

1 Ответ

0 голосов
/ 19 февраля 2020

О, неважно. : Pesel имел тип integer в базе данных. Если изменить его на строку, все будет отлично.

...