Rails钱宝石和表单生成器

Dav*_*vid 9 forms rubygems currency ruby-on-rails formbuilder

我遇到了表格和金钱宝石的问题.

这是我的问题:

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

如何让它以美元而非美分显示预先填充的金额?

编辑:

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

= f.text_field(:amount, :to_money)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

undefined method `merge' for :to_money:Symbol
Run Code Online (Sandbox Code Playgroud)

Dyl*_*kow 11

鉴于迁移如下:

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
Run Code Online (Sandbox Code Playgroud)

一个模型如下:

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
Run Code Online (Sandbox Code Playgroud)

然后这个表单代码应该完美地工作(我刚刚在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 %>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的回答.Just和FYI为其他人 - 其中`[%w(分美分)`...写的,第一个'美分'代表你的列:`items`而第二个'美分'代表宝石的方法. (3认同)