Несколько форм на одной странице с Rails - PullRequest
6 голосов
/ 20 марта 2010

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

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

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

form_for @user do
  ...
end

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

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

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

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

Спасибо!

Ответы [ 3 ]

9 голосов
/ 20 марта 2010

Вы можете сделать это с 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] будет представлять имя / пароль школы.

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

4 голосов
/ 20 марта 2010

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

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

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

0 голосов
/ 20 марта 2010

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

Предоставление вашей модели User могло бы помочь, но я предполагаю, что это что-то вроде: User own_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
...