用 Money-rails 搜索价格

Ransack search for price with Money-rails

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

我想在 Ransack 搜索字段中输入以美元为单位的价格,然后它将其转换为美分以便在相关 table.

中找到它

所以基本上问题是如何在使用 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>

非常感谢!

Custom predicate可以解决问题

您可以使用 formatter proc 将美元转换为美分。当您将显示 ransack 对象的价格值时,可能会出现问题。

更新 #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 %>