Ruby on rails。 Ransack搜索money-rails货币化属性

时间:2016-02-23 13:08:21

标签: ruby-on-rails search ransack currency money-rails

我在使用ransack搜索money-rails / Monetized属性时遇到问题。我只能用美分搜索。我有一个带有金钱属性salary的模特(演出)。我可以创建这个模型没问题:

 <%= form.input :salary %>

salary_cents列中的值保存为我在我的gig模型中的预期值:

monetize :salary_cents

然后我可以在视图中显示薪水:

<%= @gig.salary %>

我遇到的问题是搜索此字段并进行搜索。 salary属性为null,salary_cents属性应该填充,但这意味着我只能搜索美分。

对于我正在使用的搜索:

<%= f.search_field :salary_cents_gteq %>
<%= f.search_field :salary_cents_lteq %>

但要搜索$30,我必须输入3000。在发送搜索请求之前,有没有办法操纵输入的数据,乘以100?我有什么更容易的方法吗?

我搜索过此内容,但无法找到有关搜索带有搜集资金的Money字段的任何信息。

提前致谢。

1 个答案:

答案 0 :(得分:1)

Ransack的custom predicates拯救了这一天!

# config/initializers/ransack.rb
Ransack.configure do |config|

    config.add_predicate 'gteq_euros', 
        arel_predicate: 'gteq',
        formatter: proc { |v| v * 100 },
        validator: proc { |v| v.present? }

    config.add_predicate 'lteq_euros', 
        arel_predicate: 'lteq',
        formatter: proc { |v| v * 100 },
        validator: proc { |v| v.present? }
end

重新启动rails应用程序后,您可以根据需要以美元/欧元进行搜索:

<%= f.search_field :salary_cents_gteq_euros %>
<%= f.search_field :salary_cents_lteq_euros %>