Ransack用Money-rails搜索价格

时间:2015-10-14 12:21:46

标签: ruby-on-rails rubygems ransack money-rails

我正在使用Ransack向我的rails应用程序添加搜索功能,而且我还使用Money-rails gem来处理价格和货币。

我想在Ransack搜索字段中以美元输入价格,然后将其转换为美分,以便在相关表格中找到它。

所以基本上问题是如何在用Ransack提交搜索之前将输入形式转换为美分。

搜索表单:

<div class="form-group">
    <%= f.label :price_cents_gteq, "Price between" %>
    <%= f.text_field :price_cents_gteq %>
    <%= f.label :price_cents_lteq, "And" %>
    <%= f.text_field :price_cents_lteq %>
</div>

提前多多感谢!

1 个答案:

答案 0 :(得分:2)

Custom predicate可以解决问题。

您可以使用formatter proc将美元兑换成美分。当您显示价格的搜索对象价值时会出现问题。

更新#1

甚至更好,您可以使用ransacker class method解决问题。

更新#2

以下是使用模型和ransaker方法的原始解决方案:

# model
ransacker :price_money, type: :integer, formatter: proc { |dollars| dollars * 100 } do |p|
  p.table[:price_cents]
end

# form in view
<%= f.number_field :price_money_gteq %>
<%= f.number_field :price_money_lteq %>