Рубин на рельсах, разбить большую форму на отдельные меньшие формы - PullRequest
2 голосов
/ 20 января 2012

Не удалось найти ответ на вопрос о том, как разделить формы в рельсах на несколько более мелких форм.

Скажем, у вас большая форма с

  • Имя
  • 1008 * Фамилия *
  • пол
  • возраст
  • Адрес электронной почты
  • страна
  • город
  • состояние

У меня есть validate_presence для всех этих полей. Поэтому, когда я создаю несколько форм, таких как:

= simple_form_for @profile, :wrapper => :inline do |f|

  = f.label "firstname"
  = f.select :firstname

без всех значений из верхнего списка (имя, фамилия и т. Д.) Я получаю ошибки, потому что форма сплиттера не содержит этих значений, и они должны присутствовать сначала, чтобы эта работа вообще.

Что может быть хорошим способом иметь несколько форм, но только с частью значений, и обновлять их, не получая описанную выше проблему?

Ответы [ 2 ]

3 голосов
/ 20 января 2012

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

Один из способов сделать это - иметь виртуальный атрибут в вашей модели, который устанавливаетсяскрытое поле в каждой форме.Например, у вас может быть форма:

= simple_form_for @profile, :wrapper => :inline do |f|
  = f.hidden :form, :input_html => {:value => 'names'} 
  = f.label "firstname"
  = f.select :firstname

Тогда в вашей модели:

class Profile
  attr_accessor :form

  validates :firstname, :presence => true, :if => lambda { |o| o.form == "names" }
end

Проверка будет выполняться, только если изменение было отправлено из правильной формы.

Ознакомьтесь с руководством по условной проверке: http://guides.rubyonrails.org/active_record_validations_callbacks.html#conditional-validation для получения более подробной информации.

Другой способ - это многошаговая форма, предложенная apneadiving: http://railscasts.com/episodes/217-multistep-forms При этом используется та же методика, что и в первом примере.с атрибутом current_step, но прогресс является линейным.

1 голос
/ 20 января 2012

Полагаю, вы запрашиваете многоэтапную форму.

Посмотрите на эту скринкаст , вы найдете условные проверки, которые являются способом продолжения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...