2010-03-20 14 views
6

इसलिए मैं हाई स्कूल के छात्रों के लिए रेल ऐप का निर्माण कर रहा हूं और उपयोगकर्ताओं को बनाने की बात आने पर मुझे समस्या आई है।रेल के साथ समान पृष्ठ पर एकाधिक फॉर्म

मैं चाहता हूं कि छात्र केवल स्कूल बनाने में सक्षम हों अगर वे अपने स्कूल का चयन करें और अपने स्कूल के पासवर्ड में सही टाइप करें।

ऐसा करने का सही/आसान तरीका क्या है? क्या मुझे उपयोगकर्ता के लिए एक द्वारपाल बनाना चाहिए # नई कार्रवाई जिसे उन्हें पहले पास करना होगा या यदि एक ही पृष्ठ पर एक छात्र एक छात्र फॉर्म में जमा कर सकता है।

form_for @user do 
    ... 
end 

लेकिन फिर उच्च विद्यालय/उच्च विद्यालय पासवर्ड के चयन के लिए एक और रूप बनाने: एक नियमित उपयोगकर्ता नाम, ईमेल, पासवर्ड का उपयोग किया जाएगा।

आदर्श रूप से नियंत्रक हाईस्कूल फॉर्म के पैरा प्राप्त करने में सक्षम होगा, उनको मान्य करेगा, फिर उपयोगकर्ता को पैरामीटर से उपयोगकर्ता बनाने के लिए आगे बढ़ें।

क्या रेलों का उपयोग करना संभव है?

मेरे सेटअप: रेल 3 और रूबी 1.9.2dev

धन्यवाद!

उत्तर

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 

फिर आपके नियंत्रक में, पैरा [: उपयोगकर्ता] आर उपयोगकर्ता डेटा का प्रतिनिधित्व करते हैं, और पैरा [स्कूल] स्कूल नाम/पासवर्ड का प्रतिनिधित्व करेंगे।

फिर उपयोगकर्ता बनाने से पहले आप सही स्कूल पासवर्ड को सत्यापित कर सकते हैं।

+0

मुझे इस कार्यान्वयन के साथ निल क्लास: कक्षा "त्रुटि के लिए" अपरिभाषित विधि 'model_name' मिल रहा है। कोई विचार? –

+1

क्या आपने @school ऑब्जेक्ट को तुरंत चालू किया था? यदि आप किसी स्कूल ऑब्जेक्ट को तुरंत चालू नहीं करना चाहते हैं, तो आप फ़ील्ड_for लाइन को यहां बदल सकते हैं: "fields_for: school do | school |"। – jrallison

+0

समझ गया! धन्यवाद! –

0

मैं रेल 3 से परिचित नहीं हूं, लेकिन यह निश्चित रूप से रेल 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 
4

jrallison fields_for के बारे में सही है, लेकिन मैं यह सुझाव देना चाहूंगा कि यह दोनों एक ही रूप में करने के लिए कड़ाई से जरूरी है या नहीं।

आप स्कूल नाम और पासवर्ड के साथ वर्णन कर रहे हैं जो उपयोगकर्ता प्रमाणीकरण की तरह लगता है। यह एक व्यक्ति के अर्थ में "उपयोगकर्ता" नहीं हो सकता है, लेकिन इस मामले में "उपयोगकर्ता" स्कूल है। हो सकता है कि आपको इस तरह से इलाज करना चाहिए: एक अलग लॉगिन फॉर्म है, यदि वे सफल होते हैं तो एक सत्र बनाएं (ताकि उन्हें बाद में अपने स्कूल के पासवर्ड को बार-बार टाइप न करना पड़े), और मानक फ़्लैश संदेश और ऐसे यदि वे असफल हैं।

उस बिंदु पर, आपको जिस फ़ॉर्म की आवश्यकता है वह सरल और एकल मॉडल है। और यदि अन्य विशेषताएं बाद में पर भी आवश्यक हो जाती हैं तो स्कूल पासवर्ड की आवश्यकता है, तो आप पहले से ही एक कदम आगे हैं।