代码之家  ›  专栏  ›  技术社区  ›  Rob Hughes

铁轨上的红宝石。Ransack搜索money rails Monetize属性

  •  0
  • Rob Hughes  · 技术社区  · 9 年前

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

     <%= form.input :salary %>
    

    将值保存在 salary_cents 如我的演出模型中所期望的,我有:

    monetize :salary_cents
    

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

    <%= @gig.salary %>
    

    我遇到的问题是用扫帚搜索这块地。这个 薪水 属性为空 工资_分 该属性已按原样填充,但这意味着我只能以美分为单位进行搜索。

    对于我正在使用的搜索:

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

    而是搜索 $30 ,我必须输入 3000 在发送搜索请求之前,是否有任何方法可以处理输入的数据,乘以100?我有没有更容易的方法?

    我已经搜索了这个,但找不到任何关于搜索金钱字段的信息。

    提前谢谢。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Guy Moller    9 年前

    兰萨克的 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 %>