Несколько форм на одной странице с Rails

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

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

Какой правильный / самый простой способ сделать это? Должен ли я создать привратник для пользователя # новое действие, которое он должен сначала выполнить, или, если это так, как на той же странице студент может отправлять в формы. Одним из них будет обычное имя пользователя, адрес электронной почты, пароль с использованием:

form_for @user do
  ...
end

Но затем создаем другую форму для выбора пароля для старшей школы.

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

Возможно ли это с помощью рельсов?

Мои настройки: Rails 3 и Ruby 1.9.2dev

Спасибо!

3 ответа

Решение

Вы можете сделать это с fields_for ( http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for)

Ваш взгляд будет выглядеть примерно так

form_for @user do |f|
  fields_for @school do |school|
    school.text_field     :name
    school.password_field :password
  end

  f.text_field     :username
  f.text_field     :email
  f.password_field :password
  f.submit "Submit"
end

Затем в вашем контроллере params[:user] будет представлять данные пользователя, а params[:school] будет представлять имя / пароль школы.

Затем вы можете подтвердить правильный школьный пароль перед созданием пользователя.

Джраллисон прав насчет fields_for, но я бы посоветовал подумать, строго ли нужно делать оба в одной форме.

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

На данный момент, форма вам нужна простая и одномодальная. И если в дальнейшем понадобятся другие функции, для которых также потребуется школьный пароль, вы уже на шаг впереди.

Я не знаком с Rails 3, но это, безусловно, будет работать с Rails 2. Может потребоваться некоторая адаптация.

Предоставление вашей модели User могло бы помочь, но я предполагаю, что это что-то вроде: User assign_to:school, а School имеет поле с именем password. В вашей пользовательской модели вы можете иметь что-то вроде:

validates_associated :school
attr_accessible :school_password

def validate_on_create
  unless self.school_password == school.password
    errors.add :school_password, "incorrect password, please try again"
  end
end

Тогда вы можете иметь поле выбора в форме, как

form_for @user do |user|
  user.select :school...
  user.password_field :school_password
end
Другие вопросы по тегам