Таким образом, я создаю приложение для направляющих для учеников средней школы, и я поразил проблему когда дело доходит до создания пользователей.
Я хочу, чтобы студенты только смогли создать учетные записи, если они выбирают свою школу и тип в пароле их школы правильно.
Каково корректное / самый легкий способ сделать это? Если я создаю привратника к user#new действию, которое они должны передать сначала или если их способ, которым на той же странице студент может отправить формам. Можно было бы быть регулярным именем пользователя, электронной почтой, использованием пароля:
form_for @user do
...
end
Но затем создавая другую форму для средней школы / выбор пароля средней школы.
Идеально контроллер смог бы получить параметрические усилители формы средней школы, проверить их, затем продолжил бы создавать пользователя из пользовательских параметрических усилителей.
Является это возможное использование направляющими?
Моя установка: Направляющие 3 и Ruby 1.9.2dev
Спасибо!
Вы можете сделать это с помощью 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 у вас может быть что-то вроде:
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