Domanda

Così Sto costruendo un'applicazione Rails per gli studenti delle scuole superiori e ho colpito un problema quando si tratta di creare utenti.

Voglio che gli studenti di essere solo in grado di creare account se selezionano correttamente la loro scuola e digitare la password della loro scuola.

Qual è il / modo più semplice corretto di fare questo? Devo creare un gatekeeper per l'utente # nuova azione che devono passare prima o il loro se un modo che sulla stessa pagina uno studente può presentare forme. Uno potrebbe essere il nome utente regolare, e-mail, password utilizzando:

form_for @user do
  ...
end

Ma poi creare un altro modulo per la / scelta delle password liceo liceo.

Idealmente il controller sarebbe in grado di ottenere i params della forma liceo, convalidare quelli, poi andare a creare l'utente dalle params utente.

Questo è possibile utilizzando le rotaie?

La mia configurazione: Rails 3 e Rubino 1.9.2dev

Grazie!

È stato utile?

Soluzione

Si può fare questo con fields_for ( http://apidock.com/rails/ActionView / Helpers / FormHelper / fields_for )

La vista sarà simile a

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

Poi nel controller, params [:] utenti rappresenteranno i dati degli utenti, e params [: scuola] rappresenterà il nome della scuola / password.

È quindi possibile convalidare la password corretta scuola prima di creare l'utente.

Altri suggerimenti

jrallison ha ragione su fields_for, ma vorrei suggerire considerare se è strettamente necessario a fare entrambe le cose nello stesso modulo.

Quello che stai descrivendo con il nome della scuola e la password suona molto come l'autenticazione degli utenti. Potrebbe non essere un "utente", nel senso di una sola persona, ma in questo caso l ' "utente" è la scuola. Forse si dovrebbe trattare in questo modo: avere un form di login separata, creare una sessione se riescono (in modo che non dovranno digitare la password della loro scuola più e più volte in seguito), e fare lo standard messaggi flash e tale se falliscono.

A quel punto, la forma che vi serve è semplice e-unico modello. E se le altre caratteristiche rendono necessarie in seguito che anche necessaria la password di scuola, sei già un passo avanti.

Non ho familiarità con Rails 3, ma questo sarò certamente lavorare con Rails 2. Potrebbe essere necessario Alcuni di adattamento.

Il conferimento modello User aiuterebbe, ma io supporre che si tratta di qualcosa di simile: un belongs_to User: scuola, e una scuola ha un campo denominato password. Nel vostro modello User si può avere qualcosa di simile:

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

Poi si può avere una casella di selezione in forma, come

form_for @user do |user|
  user.select :school...
  user.password_field :school_password
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top