【问题标题】:Money-rails gem: How to use Money object in ActiveRecord query?Money-rails gem:如何在 ActiveRecord 查询中使用 Money 对象?
【发布时间】:2014-03-08 19:12:29
【问题描述】:

在我安装 money-rails gem 之前,我的控制器中有这个查询:

@forecasts.where('max >= ?', @budget).limit(1)[0]

其中:budget 是表forecasts 中的一个整数列。

安装money-rails 后,我将该列重命名为:budget_subunits,在我的:forecast 模型中输入monetize: :budget_subunits as: :budget,这样:budget 现在是一个Money 对象。现在此查询导致以下错误:

PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: "--- !ruby/object:Money fractional: 4000000000.0 currency: !ruby/object:Money::Currency id: :usd priority: 1 iso_code: USD name: United States Dollar symbol: $ alternate_symbols: - US$ subunit: Cent subunit_to_unit: 100 symbol_first: true html_entity: $ decimal_mark: . thousands_separator: ',' iso_numeric: '840' bank: !ruby/object:Money::Bank::VariableExchange rounding_method: rates: {} mutex: !ruby/object:Mutex {} " LINE 1: ...get_segments"."budget_source_id" = $1 AND (max >= '--- !ruby... ^ : SELECT "budget_segments".* FROM "budget_segments" WHERE "budget_segments"."budget_source_id" = $1 AND (max >= '--- !ruby/object:Money fractional: 4000000000.0 currency: !ruby/object:Money::Currency id: :usd priority: 1 iso_code: USD name: United States Dollar symbol: $ alternate_symbols: - US$ subunit: Cent subunit_to_unit: 100 symbol_first: true html_entity: $ decimal_mark: . thousands_separator: '','' iso_numeric: ''840'' bank: !ruby/object:Money::Bank::VariableExchange rounding_method: rates: {} mutex: !ruby/object:Mutex {} ') ORDER BY "budget_segments".max ASC LIMIT 1

我知道我可以只使用 :budget_subunits 列并将其与 :max_subunits 列进行比较,但这不会破坏使用 money-rails gem 的全部目的吗?

简单地说,如何在 activerecord 查询中使用 Money 对象?

【问题讨论】:

    标签: ruby-on-rails-4 rails-activerecord currency money-rails


    【解决方案1】:

    调用cents将其转换为美分值,然后查询。

    【讨论】:

    • 谢谢瑞恩,我知道我可以做到,但我觉得这破坏了货币宝石的一个重要目的,我认为它是无缝使用没有子单元的货币对象并让宝石转换它当它到达数据库时将其转换为子单元,然后自动将其转换回输出。但如果这是使用它的唯一方法,那么我会的。
    • 不,Money gem 不会神奇地为您转换东西。没有宝石应该。
    猜你喜欢
    • 2015-08-29
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多