PostgreSQL मानक SQL सरणियों और मानक any op (...)
वाक्य रचना:
इसका मतलब है कि आप इस तरह SQL बना सकते हैं:
where name ilike any (array['%Richard%', '%Feynman%'])
यह अच्छा और संक्षिप्त है तो हम इसे बनाने के लिए रेल कैसे प्राप्त करते हैं? यह वास्तव में बहुत आसान है:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })
कोई मैनुअल उद्धरण की आवश्यकता नहीं है, ActiveRecord सरणी को एक उचित रूप से उद्धृत / बची हुई सूची में बदल देगा जब यह ?
भरता है में प्लेसहोल्डर।
अब आपको बस names
. बनाना है सरणी। ऐसा कुछ आसान काम करना चाहिए:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names = params.values_at(*fields).select(&:present)
आप एकल 'a b'
. को भी रूपांतरित कर सकते हैं 'a', 'b'
. में इनपुट एक split
. को उछाल कर और flatten
मिश्रण में:
names = params.values_at(*fields)
.select(&:present)
.map(&:split)
.flatten