سؤال

لذلك أنا أقوم ببناء تطبيق Rails لطلاب المدارس الثانوية وقد واجهت مشكلة عندما يتعلق الأمر بإنشاء المستخدمين.

أريد أن يكون الطلاب قادرين فقط على إنشاء حسابات إذا اختاروا مدرستهم واكتب كلمة مرور مدرستهم بشكل صحيح.

ما هي الطريقة الصحيحة / الأسهل للقيام بذلك؟ هل يجب أن أقوم بإنشاء حارس بوابة للمستخدم#الإجراء الجديد الذي يتعين عليهم تمريره أولاً أو إذا كان ذلك في نفس الصفحة التي يمكن للطالب تقديمها إلى النماذج. سيكون المرء اسم المستخدم العادي والبريد الإلكتروني وكلمة المرور باستخدام:

form_for @user do
  ...
end

ولكن بعد ذلك إنشاء نموذج آخر لاختيار كلمة مرور المدارس الثانوية / المدرسة الثانوية.

من الناحية المثالية ، ستكون وحدة التحكم قادرة على الحصول على معلمات نموذج المدرسة الثانوية ، والتحقق من صحة هذه ، ثم انتقل إلى إنشاء المستخدم من معاملات المستخدم.

هل هذا ممكن باستخدام القضبان؟

الإعداد الخاص بي: Rails 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

ثم في وحدة التحكم الخاصة بك ، ستقوم المعاملات [: المستخدم] بتمثيل بيانات المستخدم ، وسيمثل المعاملات [: المدرسة] اسم المدرسة/كلمة المرور.

يمكنك بعد ذلك التحقق من صحة كلمة مرور المدرسة الصحيحة قبل إنشاء المستخدم.

نصائح أخرى

Jrallison محق في fields_for, ، لكنني أقترح النظر في ما إذا كان من الضروري تمامًا القيام بكل منهما على نفس الشكل.

ما تصفه باسم المدرسة وكلمة المرور يبدو مثل مصادقة المستخدم. قد لا يكون "مستخدمًا" بمعنى شخص واحد ، ولكن في هذه الحالة "المستخدم" هو المدرسة. ربما يجب أن تعاملها بهذه الطريقة: لديك نموذج تسجيل دخول منفصل ، وإنشاء جلسة إذا نجحت (حتى لا يضطروا إلى كتابة كلمة مرور مدرستهم مرارًا وتكرارًا لاحقًا) ، والقيام برسائل الفلاش القياسية وكذا إذا فشلوا.

عند هذه النقطة ، يكون النموذج الذي تحتاجه بسيطًا ونماذج واحدة. وإذا أصبحت الميزات الأخرى ضرورية لاحقًا ايضا تحتاج إلى كلمة مرور المدرسة ، فأنت بالفعل خطوة إلى الأمام.

لست على دراية بـ Rails 3 ، لكن هذا سيعمل بالتأكيد مع Rails 2. قد يكون بعض التكيف ضروريًا.

من شأن توفير نموذج المستخدم الخاص بك أن يساعد ، لكنني سأفترض أنه شيء مثل: مستخدم ينتمي إلى: المدرسة ، والمدرسة لديها حقل يدعى كلمة مرور. في نموذج المستخدم الخاص بك ، يمكنك الحصول على شيء مثل:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top