Filterrific不将多个参数传递给范围

时间:2016-11-15 14:49:19

标签: ruby-on-rails filterrific

我有一个filterrific范围,可以接受多个参数。范围似乎正常运行(我可以在控制台中调用Marketplace :: Lot.with_price({})并返回正确的结果),但是当我在表单上输入信息时,filterrific没有向其传递任何数据。

这是我在模型中的filterrific声明

  filterrific(
    default_filter_params: { sorted_by: 'time_remaining_asc' },
    available_filters: [
      :with_price,
      :sorted_by,
      :lots_with_item_type,
      :search_query
    ]
  )

以下是我的控制器的样子:

@filterrific = initialize_filterrific(
  Marketplace::Lot,
  params[:filterrific],
  select_options: {
    sorted_by: Marketplace::Lot.options_for_sorted_by,
    item_types: Marketplace::Lot.options_for_item_types
  },
  persistence_id: 'marketplace_key',
) or return

@lots = @filterrific.find.paginate(page: params[:page], per_page: 20)

和我的观点

    <%= f.fields_for :with_price,  OpenStruct.new(@filterrific.with_price) do |with_price_fields| %>
    <div class="marketseach__shards shards">
      <%= with_price_fields.text_field :shards_min, class: 'marketplace__value input', placeholder: 'Low Value' %>
      -
      <%= with_price_fields.text_field :shards_max, class: 'marketplace__value input', placeholder: 'High Value' %>
    </div>
    <span class="marketsearch__text">or</span>
    <div class="marketsearch__gems gems">
      <%= with_price_fields.text_field :gems_min, class: 'marketplace__value input', placeholder: 'Low Value' %>
      -
      <%= with_price_fields.text_field :gems_max, class: 'marketplace__value input', placeholder: 'High Value' %>
    </div>
    <% end %>

当我提交表单时,价格字段显示在参数哈希

"filterrific"=>
 { "search_query"=>"Programming",
   "lots_with_item_type"=>"",
   "with_price"=>{"shards_min"=>"200", "shards_max"=>"", "gems_min"=>"", "gems_max"=>""},
   "sorted_by"=>"alpha_asc"
 },

然而,它永远不会到达范围(我在范围内有一个从未被命中的binding.pry)。我应该注意到所有其他范围都正常工作。

我确定我错过了一些明显的东西,但我找不到它的生命。

1 个答案:

答案 0 :(得分:0)

Filterrific中存在一个错误,当在作用域中传递多个字段时会出错。目前已在Pull请求#116中修复,但是截至2016年12月24日这个帖子尚未合并到主分支...如果您手动更新filterrific gem它将一直有效,直到新版本发布... < / p>

https://github.com/jhund/filterrific/pull/116

约翰