0

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

 <%= form.input :salary %>

salary_cents正如我的演出模型中预期的那样,它将值保存在列中:

monetize :salary_cents

然后我可以在视图中显示工资:

<%= @gig.salary %>

我遇到的问题是用 ransack 搜索这个字段。该salary属性为空,并且该salary_cents属性按应有的方式填充,但这意味着我只能以美分搜索。

对于我正在使用的搜索:

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

但要搜索$30,我必须输入3000。在发送搜索请求之前,有什么方法可以操作输入的数据,乘以 100?有没有我想念的更简单的方法?

我已经对此进行了搜索,但找不到任何有关使用 ransack 搜索 Money 字段的信息。

提前致谢。

4

1 回答 1

1

Ransack 的自定义谓词节省了一天!

# 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 %>
于 2016-03-12T23:05:41.457 回答