7

पर प्रदान किया गया था सबसे पहले, मैं RoR के लिए नया हूं, इसलिए उत्तर स्पष्ट हो सकता है, इस मामले में मैं क्षमा चाहता हूं। मैंने चारों ओर देखा है और कुछ भी नहीं मिला है जो मदद करता है।शीर्षलेख में ransack खोज फ़ॉर्म आंशिक: No Ransack :: खोज ऑब्जेक्ट खोज_form_for

मैं अपने ऐप पर प्रत्येक वेब पेज के शीर्ष पर एक खोज फ़ॉर्म खोजने की कोशिश कर रहा हूं जो मेरे सभी "बाल्टी" के नामों के माध्यम से खोज करेगा।

एप्लिकेशन/विचारों/लेआउट/_header.html.erb में (एक नेविगेशन बार के भीतर):

<% search_form_for @q do |f| %> 
    <%= f.label :name_cont %> 
    <%= f.text_field :name_cont %> 
    <%= f.submit %> 
<% end %> 

एप्लिकेशन/नियंत्रक/buckets_controller.rb में:

def index 
    unless params[:q].blank? 
    @q = Bucket.search(params[:q]) 
    @buckets = @q.result.paginate(:page => params[:page]) 
    else 
    @buckets = Bucket.find(:all, :limit => 5).paginate(:page => params[:page]) 
    end 
end 
यहाँ प्रासंगिक कोड है

मुझे लगता है कि आखिरी हिस्सा इतना अच्छा नहीं है: मैं जो करने की कोशिश कर रहा हूं वह यह है कि अगर मैं केवल बाल्टी इंडेक्स पेज (खोज करके नहीं) तक पहुंच रहा हूं, तो मैं 5 सबसे हाल ही में बनाई गई बाल्टी प्रदर्शित करता हूं। जब मैं हेडर फॉर्म में कुछ खोजता हूं, तो मैं इंडेक्स पेज तक पहुंचता हूं लेकिन केवल बाल्टी दिखाता हूं जो खोज को दबाता है। (मेरे सूचकांक पृष्ठ से अलग खोज पृष्ठ रखने के लिए इसे बेहतर तरीके से संभालने का एक बेहतर तरीका होगा?)

मुझे this issue मिला जो कि काफी समान है, लेकिन मुझे अभी भी यह नहीं दिखाई देता कि मैं @q को कैसे संभालता हूं यदि प्रत्येक पृष्ठ जा रहा है इस पर फॉर्म है - निश्चित रूप से मुझे हर नियंत्रक की हर क्रिया को बदलने की ज़रूरत नहीं है?

किसी भी निराशा के लिए अग्रिम में क्षमा करें मेरे कारण मेरे कारण!

+0

मैं अनुशंसित रिकॉर्ड के माध्यम से चला गया है लेकिन कोई भाग्य नहीं है। क्या आप अपना उत्तर – Benjamin

+0

@Vezu साझा करने के लिए दयालु हो सकते हैं नया जवाब देखें। – Eric

उत्तर

9

के रूप में अन्य लोगों ने कहा है, तो आप ApplicationController के before_filter का उपयोग करने की जरूरत है। हालांकि एर्नी खुद को इसकी अनुशंसा नहीं करता है, कार्यान्वयन सरल है।

पहले, उन्नत लूटना विकल्पों का उपयोग अपनी खोज के लिए अपना रास्ता निर्धारित करने के लिए thusly

#config/routes.rb 
    resources :buckets do 
    collection do 
     match 'search' => 'buckets#search', via: [:get, :post], as: :search 
    end 
    end 

दूसरा, अपने BucketsController निम्नलिखित कस्टम क्रिया शामिल करने के लिए अद्यतन: से बाहर अभी तक

#controllers/buckets_controller.rb 
    def search 
    index 
    render :index 
    end 

कुछ भी नहीं है साधारण। यदि आप वर्तमान में खोज करने का प्रयास करते हैं तो आपको अपने मूल प्रश्न से त्रुटि मिल जाएगी। चर q की अपनी परिभाषा को सही ढंग से लागू किया गया है, लेकिन आप इसे इतना पसंद किया ApplicationController को स्थानांतरित करना होगा:, अंत में

#controllers/application_controller.rb 
before_filter :set_global_search_variable 

    def set_global_search_variable 
    @q = Bucket.search(params[:q]) 
    end 

अपने खोज प्रपत्र को अद्यतन सही खोज विकल्पों में पारित करने के लिए

#layouts/_header.html.erb 

    <% search_form_for @q, url: search_buckets_path, html: { method: :post } do |f| %> 
     <%= f.label :name_cont %> 
     <%= f.text_field :name_cont %> 
     <%= f.submit %> 
    <% end %> 
+0

धन्यवाद। अद्भुत काम करता है! –

1

नहीं, आपको अपने सभी नियंत्रकों को संपादित करने की आवश्यकता नहीं है।

आप अपने सभी "सामान्य" नियंत्रक आवश्यकताओं के लिए एप्लिकेशन नियंत्रक का उपयोग कर सकते हैं। इस पर गाइड http://guides.rubyonrails.org/action_controller_overview.html में पढ़ें और एपीआई डॉक्स http://api.rubyonrails.org/classes/ActionController/Base.html

यहाँ मुख्य बिंदु है, जब आप अपने नए रेल एप्लिकेशन उत्पन्न, आप इसे फ़ाइल .../ऐप्स/नियंत्रक/action_controller.rb बनाया पर ध्यान देंगे और वह वर्ग एक्शनकंट्रोलर :: बेस से निकला है। फिर, यदि आप फिर से अपने ऐप के लिए नियंत्रक बनाने के लिए रेल जनरेटर का उपयोग करते हैं, तो आप देखेंगे कि आपका नया कंट्रोलर क्लास एप्लिकेशन कंट्रोलर (नहीं :: बेस) से निकला है। इसका मतलब है कि application_controller.rb आपके ऐप के लिए पैरेंट कंट्रोलर क्लास है। इसका मतलब है कि इसमें सबकुछ आपके सभी ऐप नियंत्रकों के लिए उपलब्ध है। दुरुपयोग करना आसान है, इसलिए न्यायिक रहें।

1

ऐसा लगता है कि यह संभव नहीं है। यह एनी मणि लेखक से एक टिप्पणी है।

आपको पहले से आंशिक रूप से पहले_फिल्टर या (ick) में रेंसैक-आवश्यक सामग्री को संभालना होगा। यदि आप साइट के हर हिस्से में पर एक खोज फ़ील्ड डाल रहे हैं, तो मैं आपको सलाह देता हूं कि आप पर दृढ़ता से विचार करें कि क्या नौकरी नौकरी के लिए सही उपकरण है। आप आदि उल्टे स्फिंक्स, Solr तरह सूचकांक खोज सेटअप के कुछ प्रकार, चाहते हो सकता है

https://github.com/ernie/ransack/issues/3

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