2011-04-14 14 views
11

अधिकांश रेल ट्यूटोरियल कैसे इतनी तरह पैरामीटर हैश के माध्यम से एक मॉडल वर्ग को भरने के लिए दिखा। हालांकि, क्या होता है यदि कुछ गुण इंक या तिथियां या किसी अन्य प्रकार के होते हैं?बनाना रेल ActiveRecord मॉडल

उदाहरण के लिए, मान लीजिए कि उपयोगकर्ता वर्ग इस

class User < ActiveRecord::Base 
    attr_accessible :email, :employment_start_date, :gross_monthly_income 
end 

की तरह लग रहा है: ईमेल विशेषता कोई स्ट्रिंग होना चाहिए,: employment_start_date विशेषता एक तारीख होना चाहिए, और: gross_monthly_income एक दशमलव होना चाहिए। इन विशेषताओं को सही प्रकार के होने के लिए, क्या मुझे इसके बजाय कुछ ऐसा देखने के लिए मेरी नियंत्रक कार्रवाई को बदलने की आवश्यकता है?

class User < ActiveRecord::Base 
    before_save :convert_values 

    #... 

    def convert_values 
    gross_monthly_income = convert_to_decimal(gross_monthly_income) 
    #and more conversions 
    end 

end 

तो तुम सिर्फ अपने नियंत्रक में User.new(params[:user]) कॉल कर सकते हैं,:

class UsersController < ApplicationController 
    def create 
     @user = User.new 
     @user.email = params[:user][:email] 
     @user.employment_start_date = params[:user][:employment_start_date].convert_to_date 
     @user.gross_monthly_income = params[:user][:gross_monthly_income].convert_to_decimal 

     # more logic for saving user/redirecting/etc. 
    end 
end 
+0

क्या आप वाकई पैरा [: उपयोगकर्ता] में सभी तार होंगे? मुझे लगता है कि जब आप एआर के साथ इसका इस्तेमाल करते हैं तो परम हैश ठीक से परिवर्तित हो जाएगा। – rmk

+0

@ आरएमके हाँ, आप सही हैं। मैंने मूल रूप से वही बात कहकर नीचे एक उत्तर जोड़ा। मैं इसे स्वीकार किए गए उत्तर के रूप में चिह्नित करूंगा, लेकिन मुझे स्वीकार्य उत्तर के रूप में अपना उत्तर चिह्नित करने से 2 दिन पहले इंतजार करना होगा। –

उत्तर

7

ActiveRecord documentation के अनुसार, गुणों को स्वचालित रूप से डेटाबेस में कॉलम प्रकारों के आधार पर टाइपकास्ट किया जाना चाहिए।

5

मैं वास्तव में एक before_save कॉलबैक अपने उपयोगकर्ताओं को मॉडल में यह सुनिश्चित करें कि मानों आप चाहते हैं सही प्रारूप यानी में हैं बनाने के लिए जोड़ना होगा जो ActiveRecord documentation के मुताबिक "आपके नियंत्रकों को पतला रखें"

+0

ऐसा लगता है कि इसे काम करना चाहिए। क्या यह ऐसा करने का "रेल मार्ग" है? ऐसा लगता है कि एक ऐसी स्थिति की तरह लगती है जो अक्सर आती है, लेकिन मेरे जीवन के लिए मुझे यह दिखाने वाले कोई ट्यूटोरियल/मार्गदर्शिका नहीं मिलती हैं। –

+0

एक नया संस्करण जोड़ा जो मुझे और पसंद है। –

+0

मुझे पहले_सवे संस्करण पसंद है। प्रश्न हालांकि: [इस] के अनुसार (http://stackoverflow.com/questions/2685226/convert-input-to-integer-before-save-in-rails/2685601#2685601), रेल रूपांतरण करने के लिए पर्याप्त स्मार्ट है आपके लिए जब यह @user = User.new (पैराम्स [: उपयोगकर्ता]) जैसे कुछ निष्पादित करता है। यदि ऐसा है, तो मुझे लगता है कि यह आवश्यक नहीं है? मुझे यकीन नहीं है कि यह सच है या नहीं। –

संबंधित मुद्दे