6

そこで、高校生向けの Rails アプリを作成していますが、ユーザーの作成に関して問題が発生しました。

学生が自分の学校を選択し、学校のパスワードを正しく入力した場合にのみ、アカウントを作成できるようにしたいと考えています。

これを行う正しい/最も簡単な方法は何ですか? 最初に渡す必要がある user#new アクションへのゲートキーパーを作成する必要がありますか、それとも同じページで学生がフォームに送信できる方法である場合。1 つは通常のユーザー名、電子メール、パスワードで、次を使用します。

form_for @user do
  ...
end

ただし、高校/高校のパスワード選択用に別のフォームを作成します。

理想的には、コントローラーが高校のフォームのパラメーターを取得し、それらを検証してから、ユーザーのパラメーターからユーザーを作成できるようにします。

これはレールを使用して可能ですか?

私のセットアップ: Rails 3 と Ruby 1.9.2dev

ありがとうございました!

4

3 に答える 3

9

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] は学校名/パスワードを表します。

その後、ユーザーを作成する前に、正しい学校のパスワードを検証できます。

于 2010-03-20T03:41:10.457 に答える
4

jrallison はほぼ正しいですがfields_for、同じフォームで両方を行うことが厳密に必要かどうかを検討することをお勧めします。

学校名とパスワードで説明していることは、ユーザー認証によく似ています。一人の意味での「ユーザー」ではないかもしれませんが、この場合の「ユーザー」は学校です。別のログインフォームを用意し、成功した場合はセッションを作成し (後で学校のパスワードを何度も入力する必要がないように)、標準のフラッシュメッセージなどを行う必要があります。彼らは失敗します。

その時点で、必要なフォームは単純な単一モデルです。また、学校のパスワードが必要な他の機能が後で必要になった場合でも、すでに一歩先を行っています。

于 2010-03-20T06:02:45.387 に答える
0

私は Rails 3 には詳しくありませんが、これは Rails 2 で確実に動作します。何らかの調整が必要になる場合があります。

User モデルを提供すると役に立ちますが、次のようなものであると仮定します: User belongs_to :school で、School には password という名前のフィールドがあります。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
于 2010-03-20T03:27:31.713 に答える