4

我试图在我的 Rails 4 应用程序中使用货币化(使用 money-rails gem)。

你如何允许用户只提交一个数字美元?当我输入 100 时,我得到 1 美元而不是 100 美元。

在我的模型中,我有:

monetize :participation_cost_pennies, with_model_currency: :participation_cost_currency

我正在使用实例货币,因此用户选择相关货币。我的表格有参与成本、参与成本便士和参与成本货币的列。

在我的表格中,我有:

   <%= par.select :participation_cost_currency,
                             options_for_select(major_currencies(Money::Currency.table)),
                             label: false,
                             prompt: "Select your costs currency" %>

            <%= par.input :participation_cost, label: false, placeholder: 'Whole numbers only', :input_html => {:style => 'width: 250px; margin-top: 20px', class: 'response-project'} %>

在我看来,我有:

   <%= money_without_cents_and_with_symbol @project.scope.participant.participation_cost  %>

通过用表格中的参与成本替换“参与成本便士”,我得到的数字显示为一个没有美分的整数,当我输入 100 时,我现在得到 10,000 美元(所以相反的问题是它在末尾添加了 2 00我的意见。

4

3 回答 3

2

似乎,您price在数据库中使用列并要求用户输入完全相同的输入。这两个不同的设置器/获取器。尝试以下操作:

# add migration
rename_column :products, :price, :price_cents


# set monetize for this field inside the model
class Product
  monetize :price_cents
end

# inside form use .price instead of .price_cents method
f.text_field :price

在这种情况下,用户以美元为单位设置价格,它将自动转换为美分以将其存储在price_cents字段中。

于 2015-06-10T17:17:19.377 回答
1

money-railsgem 中,价格以美分保存,因此 100 输出 1 美元是正常的,因为它确实是 100 美分。100 美元将是 10000。这是故意的,以避免浮点舍入错误

如果您想在应用程序中处理美元,您可以编写一个辅助函数来将您的输入转换为美分。

于 2015-06-10T11:09:43.790 回答
1

假设您的表中有price_cents列。您可以尝试使用此代码在 monitize 之前将美元金额转换为美分:

monetize :price_cents
before_save :dollars_to_cents

def dollars_to_cents
    #convert dollar to cents
    self.price_cents = self.price_cents * 100 
end
于 2015-06-10T14:28:55.117 回答