【问题标题】:Rails sunspot price range facetRails 太阳黑子价格范围方面
【发布时间】:2014-06-04 05:32:38
【问题描述】:

我正在尝试在我的一个模型上设置价格分面,但我似乎无法让它正常工作。无论我选择哪个方面,它都只会返回价格等于 0 美元的列表。我不确定我在这里缺少什么。任何帮助将非常感激。这是我的代码:

迁移

class CreateListings < ActiveRecord::Migration
  def change
    create_table :listings do |t|
      t.references :member
      t.text :title
      t.text :link
      t.text :category
      t.text :description
      t.decimal :price, :precision => 8, :scale => 2

      t.timestamps
    end
    add_index :listings, :member_id
    add_attachment :listings, :feature
  end
end

型号

class Listing < ActiveRecord::Base

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

end

控制器

class ListingsController < ApplicationController

  def index
    @listings = Listing.order('created_at desc').page(params[:page]).per_page(60)
    @search = Listing.search do
      fulltext params[:search]
      facet(:marker_list, :limit => 48, :sort => :count)
      with(:marker_list, params[:tag]) if params[:tag].present?
      facet(:price) do
        row("$0 - $25") do
          with(:price, 0.00..25.00)
        end
        row("$25 - $75") do
          with(:price, 25.01..75.00)
        end
        row("$75 - $250") do
          with(:price, 75.01..250.00)
        end
        row("$250+") do
          with(:price).greater_than(250.00)
        end
      end
      with(:price, params[:price]) if params[:price].present?
    end
    @query = params[:search]
    @facet = params[:tag]
    @price_facet = params[:price]
    @results = @search.results

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @listings }
    end
  end

end 

查看

<% for row in @search.facet(:price).rows %>
    <span class="eloc"><%= link_to row.value, :price => row.value %></span>
<% end %> 

【问题讨论】:

    标签: ruby-on-rails solr sunspot faceted-search sunspot-rails


    【解决方案1】:

    您可能已经找到解决此问题的方法,我可以找到的解决方法之一是使用范围方面而不是查询方面。所以它会是这样的:

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

    希望对您有所帮助!

    【讨论】:

    • 当我尝试这个时,我得到wrong number of arguments (1 for 2..3)
    • 你能分享更多关于错误的细节吗?..这就是我正在做的事情:控制器:def index @search = Experience.solr_search do fulltext params[:search] facet :budget, :range =&gt; 0..300, :range_interval =&gt; 50 with(:budget,Range.new(*params[:budget].first.split("..").map(&amp;:to_i))) if params[:budget].present? end @experiences = @search.results end 在视图中:&lt;% for row in @search.facet(:budget).rows %&gt; &lt;span class="eloc"&gt;&lt;%= link_to row.value, :budget =&gt; row.value %&gt;&lt;/span&gt; &lt;% end %&gt;
    • 终于有时间再看看这个。你说得对,范围方面是要走的路,我认为我需要将我的价格索引为双倍才能让它发挥作用。谢谢!
    • 你知道如何给行值取一个更用户友好的名称吗?因此,链接不会显示为0..300,而是类似于$0 - $300
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多