2010-10-16 14 views
11

मैं रयान के सरल खोज प्रपत्र ट्यूटोरियल यहाँ अनुसरण कर रहा हूँ खोज करने के लिए की तरह उपयोग करना:रेल 3 - एक संयुक्त 2 कॉलम

find(:all, :conditions => ['fname LIKE ?', "%#{search}%"]) 

लेकिन क्या: http://railscasts.com/episodes/37-simple-search-form

मैं अपने उपयोगकर्ता मॉडल में निम्न पंक्ति है मैं क्या करना चाहते हैं खोज भर में एक 2 कॉलम गठबंधन है ,: fname & lname

उपयोगकर्ताओं के रूप में अपना पूरा नाम खोज रहे हैं:

उदाहरण, जेम्स ब्राउन fname = जेम्स lname = ब्राउन

वहाँ कि SQLite, MySQL या Postgres (Heroku उपयोग करता है) की तरह डीबीएस भर में काम करेंगे सुरक्षित रूप से रेल में ऐसा करने का कोई तरीका है?

धन्यवाद!

उत्तर

14

यह बहुत नहीं हो सकता है, लेकिन मैं अपने व्यक्ति मॉडल में इस का उपयोग करें:

scope :by_full_name lambda {|q| 
    where("first_name LIKE ? or last_name LIKE ? or concat(last_name, ', ', first_name) LIKE ?", "%#{q}%", "%#{q}%" , "%#{q}%") 
} 

एक सा अतिरिक्त खोज क्वेरी के वैकल्पिक हो जाएगा कि के लिए मेरे other posts में से एक देखें।

+2

यह mysql में काम करता है, मुझे अन्य डीबी के बारे में पता नहीं है। – DGM

+0

इसके अलावा, मेरे उपयोग के लिए अंतिम नाम, प्रथम नाम की आवश्यकता है, आवश्यकतानुसार कॉन्सट समायोजित करें। – DGM

+0

क्या कॉन्सट परिणाम पूर्ण तालिका स्कैन में होता है? –

0

यह बहुत अच्छा काम कर रहा है ... हालांकि प्रदर्शन के बारे में निश्चित नहीं है। क्या सूचकांक सहायता कर सकते हैं?

: शर्तें => ['fname || लंका पसंद है? ', "% # {खोज}%"]

+0

ठीक है शायद यह आदर्श नहीं है। यदि आप एक और शर्त जोड़ते हैं जैसे: [project =? एंडफनाम || नाम पसंद है? ', "% # {खोज}%", "% # {search2}%"] लॉग में क्वेरी वास्तविक गन्दा हो जाती है। यकीन नहीं क्यों? – WozPoz

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