7

sağlandı. Öncelikle, RoR'a yeni geldim, bu yüzden yanıt apaçık olabilir, bu durumda özür dilerim. Etrafa baktım ve yardımcı olan bir şey bulamadım.ransack arama formu başlığında Kısmi: Hayır Ransack :: Search objectform_form_for için

Uygulamamdaki her web sayfasının başlığında, tüm "paketlerim" adlarını arayacak bir arama formunu bulmaya çalışıyorum. Uygulamanın/görünümler/düzenleri/_header.html.erb olarak

(bir gez çubuğu içinde): app/denetleyicileri/buckets_controller.rb olarak

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

:

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 
İşte alakalı koddur

Son bölümün bu kadar iyi olmadığını anlıyorum: yapmaya çalıştığım şey, yalnızca dizin dizini sayfasına erişiyorsam (arama yaparak değil), en son oluşturulmuş 5 kova gösteriyorum. Başlık formunda bir şey aradığımda, dizin sayfasına erişirim, ancak aramayı başlatan yalnızca kasetleri gösteririm. (dizin sayfamdan ayrı bir arama sayfasına sahip olmanın daha iyi bir yolu olur mu?)

Ben hemen hemen aynı olan this issue buldum, ancak hala her sayfa gidiyorsa ben @q nasıl işlediğimi görmüyorum Üzerinde form var - kesinlikle her denetleyicinin her eylemini değiştirmek zorunda değilim.

Herhangi bir hayal kırıklığı için şimdiden özür dilerim hayır!

+0

Doğru arama seçeneklerine geçmek için, Nihayet

#controllers/application_controller.rb before_filter :set_global_search_variable def set_global_search_variable @q = Bucket.search(params[:q]) end 

arama formunu güncellemek önerilen kayıtlardan geçti ama şans yok. Cevabınızı – Benjamin

+0

@ Vezu paylaşarak yeni yanıtlara göz atabilirsiniz. – Eric

cevap

9

Diğerleri söylediler, sen ApplicationController en before_filter kullanmak gerekir. Ernie'nin kendisi bunu tavsiye etmese de uygulama basittir.

İlk olarak, arama için yolunu ayarlamak için thusly

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

İkinci gelişmiş Ransack seçeneklerini kullanmak, aşağıdaki özel eylemi içerecek şekilde BucketsController güncelleyin: dışarı henüz

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

Hiçbir şey sıradan. Şu anda arama yapmaya çalışırsanız, orijinal sorunuzdan bir hata alırsınız. Değişken Q ile ilgili tanım doğru bir şekilde uygulandığından, ancak bunu gibi ApplicationController taşımak zorunda kalacak:

#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

Teşekkürler. harikalar yaratır! –

1

Hayır, tüm denetleyicileri düzenlemeniz gerekmez.

Tüm "ortak" denetleyici gereksinimleriniz için ApplicationController'ı kullanabilirsiniz. kılavuzların http://guides.rubyonrails.org/action_controller_overview.html bunun üzerinde okuma ve API dosyaları http://api.rubyonrails.org/classes/ActionController/Base.html

burada

tuşu yeni raylar app oluştururken is, bunu dosya .../app/denetleyicileri/action_controller.rb yarattı fark edeceksiniz ve Bu sınıf ActionController :: Base'den türetilir. Ardından, uygulamanız için bir denetleyici oluşturmak üzere ray jeneratörünü tekrar kullanırsanız, yeni denetleyici sınıfınızın ApplicationController'dan (Not: Base) türediğini fark edeceksiniz. Bu, application_controller.rb'nin uygulamanızın ana denetleyici sınıfı olduğu anlamına gelir. Bu, içerdeki her şeyin tüm uygulama denetleyicileriniz için geçerli olduğu anlamına gelir. Kötüye kullanımı kolaydır, bu yüzden mantıklı ol.

1

Bunun mümkün olmadığı anlaşılıyor. Bu, Ernie'den bir mücevher yazarı.

Sen kendini kısmi görünümünde bir before_filter veya (Tran) içinde Ransack-Gerekli malzeme işlemek gerekir. Sitenin her bir parçası için numaralı arama alanına bir arama alanı koyarsanız, numaralı telefonu muhakkak iş için uygun bir araç olup olmadığını mutlaka öneririz. Sen vs Sfenks, solr gibi ters endeks arama kurulumu çeşit, isteyebilirsiniz

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

İlgili konular