gpt4 book ai didi

ruby-on-rails - Rails 金钱 gem 和表单生成器

转载 作者:行者123 更新时间:2023-12-02 10:51:38 26 4
gpt4 key购买 nike

我的表单和 money gem 有问题。

这是我的问题:

  1. 我创建了一条具有“金额”字段(映射到货币对象)的记录。假设我输入 10(美元)。
  2. 金钱 gem 将其转换为 1000(美分)
  3. 我编辑同一条记录,表单将金额字段预填充为 1000
  4. 如果我保存记录而不做任何更改,它会将 1000(美元)转换为 100000(美分)

如何让它显示预先填充的金额(以美元而不是美分为单位)?

编辑:

我尝试像这样编辑 _form.html:

= f.text_field(:amount, :to_money)

我收到此错误:

undefined method `merge' for :to_money:Symbol

最佳答案

假设迁移如下:

class CreateItems < ActiveRecord::Migration
def self.up
create_table :items do |t|
t.integer :cents
t.string :currency
t.timestamps
end
end

def self.down
drop_table :items
end
end

模型如下:

class Item < ActiveRecord::Base
composed_of :amount,
:class_name => "Money",
:mapping => [%w(cents cents), %w(currency currency_as_string)],
:constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency || Money.default_currency) },
:converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't conver #{value.class} to Money") }
end

然后这个表单代码应该可以完美工作(我刚刚在 Rails 3.0.3 下测试),每次保存/编辑时都能正确显示并保存美元金额。 (这是使用默认的脚手架更新/创建方法)。

<%= form_for(@item) do |f| %>
<div class="field">
<%= f.label :amount %><br />
<%= f.text_field :amount %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>

关于ruby-on-rails - Rails 金钱 gem 和表单生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4856803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com