2012-09-21 25 views
10

Gelişmiş bir arama ağı arama kullanımı ile biraz kafam karıştı. Tüm tablo adlarının arama terimleri olarak seçilemediği ve tüm yüklemlerin kullanılmadığı yerlerde özel bir arama yapmaya çalışıyorum. Bunun için bir eğitici olarak railscast kullandım, ancak yüklemelerin sayısını sınırlayacak hiçbir şey bulamıyorum. Öncül ve tablo alanlarının isimlerini farklı dilde (sadece etiketlerde) kullanma imkanı var mıdır?Ransack gem yüklemeyi seçin ve özel yüklem isimleri

Arama formu ben bir çözüm buldum

def index 
    select_offers = Offer.where { (user_id != id) & (ended == false) & ((created_at + life_time) > DateTime.now) } 
    @q = select_offers.search(params[:q]) 
    @offers = @q.result(:distinct => true).page(params[:page]) 
    @q.build_condition 
    @q.build_sort if @q.sorts.empty? 
end 

cevap

18

= search_form_for @q, :url => search_offers_path, :html => { :method => :post } do |f| 
    = f.condition_fields do |c| 
    .field 
     = f.attribute_fields do |a| 
     = a.attribute_select 
     = f.predicate_select 
     = f.value_fields do |v| 
     = v.text_field :value 
     = link_to "#{t :destroy}", '#', class: "remove_fields" 

    = link_to_add_fields "#{t :add}", f, :condition 

    .field 
    = t :sort 
    = f.sort_fields do |s| 
     = s.sort_select 

    = f.submit "#{t :search}" 

Benim denetleyicisi. Taklit etiketlerini değiştirmek için i18n kullandım. öznitelik isimlerini değiştirmek için bir olasılık vardır

en.yml 

ransack: 
    asc: "ascending" 
    desc: "descending" 
    predicates: 
    cont: "contains" 
    not_cont: "not contains" 
    start: "starts with" 
    end: "ends with" 
    gt: "greater than" 
    lt: "less than" 
    ... 

attributes: 
    model_name: 
    model_field1: "field name1" 
    model_field2: "field name2" 
    ... 

arama yerine Yapmak

= f.attribute_fields do |a| 
    = a.attribute_select 
= f.select :p, { 'custom predicate name1' => :predicate1, 'custom predicate name2' => :predicate2 } 

kullanılan

= f.predicate_select 

ait yüklemler sınırlamak için alanlar limit arama tablosu Yalnızca-seçeneği:

<%= f.predicate_select only: [:cont, :not_cont, :eq, :not_eq, :blank, :null, :not_null] %> 

Maalesef geçti dizideki eleman sırası gelmez elds ben predicate_select formu yardımcı içinde yüklemler siz dizisi iletebilirsiniz sınırı için

UNRANSACKABLE_ATTRIBUTES = ["id", "published", "created_at"] 

def self.ransackable_attributes auth_object = nil 
    (column_names - UNRANSACKABLE_ATTRIBUTES) + _ransackers.keys 
end 
+0

Fantastik Soru ve cevap, bunun için kudos, Son zamanlarda Ransack'a daha derinden kazandığınız için, şu soruya bir göz atabilir misiniz: http://stackoverflow.com/questions/13241481/in-form-sorting -using-ransack-gem-not-working Gerçekten biraz yardım edebilirim, gerçekten sıkışmış durumdayım! Teşekkürler – jlstr

+0

Merhaba, tekrar sorun yaşadığınız için özür dilerim, UNRANSACKABLE_ATTRIBUTES dizisindeki bazı yöntemleri hariç tutmanın bir yolu var mı? Örneğin, ilişkiler tarafından oluşturulan yöntemleri hariç tutmak istiyorum, benim durumumda bir ürün ürün türüne ait ve ürün tipi açılır pencereyi gösteriyor. Bunu kaldırmak için bir yolu var mı? Şimdiden teşekkürler! – jlstr

+0

Tüm yüklemleri buradan kontrol edebilirsiniz: https://github.com/activerecord-hackery/ransack/blob/master/lib/ransack/constants.rb –

8

model eklendi listelemenin hiç önemli değil, bu yüzden bu şekilde çalışmıyor.


Eğer bileşikler (_any & _all) beğenmezseniz hatta onlar (ı gibi) de geçebilir için iyidir bilmiyorum: bileşikleri-seçeneği:

<%= f.predicate_select compounds: false %> 

Yardım budur. Ernie bugüne kadar pek çok ilginç ve şaşırtıcı şeyler yaptı, ancak belgeselleri bir çeşit yapışkan bant: çok, çok incedir ve elinizde tutmaya çalışırsanız sıkışırsınız.

+1

Bileşik açıklamaları için çok teşekkürler! – daveomcd

+0

Son olarak - zehirli bileşikleri öldürebilirim! – ineedahero

İlgili konular