2009-11-03 12 views
6

मैं रेल 2.3.4 के साथ संस्करण 2.3.5 में 'बाइनरीलॉगिक-सर्चलॉगिक' मणि का उपयोग कर रहा हूं।रेल: सर्चलॉग खोज या शर्तों

मैं जो करना चाहता हूं वह कई विशेषताओं पर निर्दिष्ट मान के लिए मॉडल पर एक खोज कर रहा है। मैं सब कुछ चेनिंग के माध्यम से इस लक्ष्य को हासिल एक साथ

User.first_name_or_last_name_or_email_like(value) 

चाहते लेकिन इस में अधिक से अधिक विशेषताओं के साथ खोज इस बदसूरत हो जाता है। इसके बजाय मैं इस तरह searchlogic की खोज तंत्र का उपयोग करना चाहते हैं:

search = User.search 
search.first_name_like = value 
search.last_name_like = value 
.. 
@users = search.all 

तो इस तरह के माध्यम से खोज करने के लिए है और - लेकिन क्या मैं चाहता हूँ या है। मुझे यह हासिल करने के दो तरीके मिल गए हैं, लेकिन दोनों काम नहीं करते हैं।

1 एक: हालत

search = User.search 
search.first_name_like = value 
search.or_last_name_like = value 
@users = search.all 

के लिए एक or_ पहले जोड़ें यह मैं The or_last_name_like is not a valid condition. You may only use conditions that map to a named scope

2 एक देता है: का उपयोग search.any

search = User.search 
search.first_name_like = value 
search.last_name_like = value 
@users = search.any 

मुझे किसी भी '# के लिए undefined method देता है `।

उस पर कोई विचार है? क्या मैं रीडमे के सही बिंदु को जोड़ रहा हूं?

आपकी बहुत स्वागत सहायता के लिए धन्यवाद!

संपादित करें: कुछ बदसूरत वैकल्पिक हल के लिए समय:

search = User.search 
search.first_name_like = value 
search.last_name_like = value 
User.find(:all, :conditions => search.scope(:find).gsub('AND','OR')) 

वर्क्स लेकिन निश्चित रूप से नहीं जाने का रास्ता है, न कि यह है है?

उत्तर

2

मुझे नहीं लगता कि ऐसा करने का दूसरा तरीका है। डिफ़ॉल्ट रूप से यह और के साथ तर्क में शामिल हो जाएगा।

या कोड, केवल चेनिंग के साथ काम करता है।

+0

+1 एक त्वरित रूप से देखने के बाद, मैं इस उत्तर से सहमत हूं। पुष्टि के लिए, आप सर्चलॉग मेलिंग सूची से पूछ सकते हैं। –

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