Несколько форм на одной странице с 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