2014-10-27 3 views
0

Я использую sunspot solr в своем приложении rails для обработки поиска, и я создал фасет, чтобы можно было искать ценовые диапазоны. Как создать ярлыки для использования значений строк в представлениях. Этот article here предлагает использовать условные операторы, но я не уверен, как бы это сделать.Ярлыки для диапазонов границ sunspot solr

Так, например, вместо значений, возникающих как:

0.0..75.0 
75.0..150.0 
150.0..225.0 
225.0..300.0 

и т.д .. Я хочу, чтобы отобразить их как:

$0 - $75 
$75 - $150 
$150 - $225 
$225 - $300 

Может кто-нибудь помочь мне с этим? Благодарю.

/models/listing.rb

searchable :auto_index => true, :auto_remove => true do 
    text :title, :boost => 5 
    text :marker_list, :boost => 2 
    string :marker_list, :multiple => true, :stored => true 
    double :price 
end 

/controllers/listings_controller.rb

def index 
    @listings = Listing.order('created_at desc').page(params[:page]).per_page(60) 

    @search = Listing.solr_search do 
     fulltext params[:listings] 

     facet :price, :range => 0..2000, :range_interval => 75 
     with(:price, Range.new(*params[:price_range].split("..").map(&:to_i))) if params[:price_range].present? 

    end 

    @results = Listing.where(id: @search.results.map(&:id)).page(params[:page]).per_page(60) 
end 

/views/listings/index.html.erb

<% for row in @search.facet(:price).rows %> 
    <span class="bprice"> 
     <%= link_to row.value, :price_range => row.value, :search => params[:listings] %> 
    </span> 
<% end %> 

ответ

1

Это просто вопрос замены регулярных выражений?

Попробуйте это:

new_string = old_string.gsub(/\.0\.\./,"$ - ").gsub(/\.0/,"$") 
# old_string = "0.0..75.0" 
# new_string = "0$ - 75$" 

Это, вероятно, означает, в вашем коде

<%= link_to (row.value).to_s.gsub(/\.0\.\./,"$ - ").gsub(/\.0/,"$"), 
       :price_range => row.value, :search => params[:listings] %> 
+0

Это дает мне эту ошибку 'неопределенный метод 'GSUB' для 0.0..75.0: Range' – iamdhunt

+0

Затем преобразовать его нанизывать. См. Мой обновленный ответ. –

+0

Да, это было так. Благодаря! – iamdhunt