我正在使用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>
提前多多感谢!
答案 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 %>