2012-01-20 3 views
1

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

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

  • Firstname
  • LastName
  • пол
  • возраст
  • электронной
  • страна
  • город
  • состояние

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

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

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

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

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

ответ

3

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

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

= 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, но прогрессия линейна.

+0

Thx, для simple_form нам нужно использовать = f.hidden_field: title,: value => "basics" вместо этого. Однако после внесения изменений в предлагаемые изменения я, похоже, не получил подтверждения, когда значения пустые, он просто обновляет профиль. нужно изучить его дальше, но это по крайней мере на правильном пути thx, я использую rails 3.1, возможно, поэтому мне нужен другой синтаксис – Rubytastic

+0

Убедитесь, что параметр «форма» передается модели для назначения. –

+0

У меня есть attr_accessor: форма и поиск о передаче параметров модели и attr_accessor.Что именно вы имеете в виду с параметром «Убедитесь, что« форма »передана модели для назначения» thx – Rubytastic

0

Вы спрашиваете многоэтапную форму, я думаю.

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

+0

Обнаружил это, это многопрофильная необходимая сфера без шагового процесса, но thx для указания – Rubytastic

Смежные вопросы