1

特定のモデルの属性 (つまり、お金) のデータ型を変更する際に問題があります。Money は整数でした -- 移行を使用して、精度 5 とスケール 2 の 10 進数に変更しようとしています。移行を実行すると、コンソールですべてが正常に表示されます (つまり、移行が機能したように見えます)。 、しかし、Web アプリで値を 10 進数に変更しようとすると、「無効な値」というメッセージが表示されます。なんらかの理由でエラーがクライアント側で発生しているように見えます (それは js ポップアップです)? ただし、クライアント側の検証は含めませんでした。私が取る手順は次のとおりです。

まず、移行を生成します。

>rails generate migration change_data_type_for_user_money

次に、移行を編集します。外観は次のとおりです。

class ChangeDataTypeForUserMoney < ActiveRecord::Migration
  def self.up
    change_table :users do |t|
      t.change :money, :decimal, :precision => 5, :scale => 2
    end
  end

  def self.down
    change_table :users do |t|
      t.change :money, :decimal, :precision => 5, :scale => 2
    end
  end
end

次に、「rake db:migrate」を実行します

奇妙なのは、小数点以下のゼロが表示され、問題がないことです (たとえば、100.00 は問題ありませんが、エラーが発生した場合は 100.50 です)。

また、モデルは次のとおりです。

class User < ActiveRecord::Base
  attr_accessible :money, :name

  validates :money, :name, :presence => true
  validates :money, :numericality => true
end

そして _from ビュー:

<%= form_for(@user) do |f| %>
  <% if @user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>

      <ul>
      <% @user.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :money %><br />
    $<%= f.number_field :money %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

何かご意見は?よろしくお願いします。

4

1 に答える 1

3

よくわかりませんが、試してください:

class ChangeDataTypeForUserMoney < ActiveRecord::Migration
  def change
    change_table :users do |t|
      t.decimal :money, :precision => 5, :scale => 2
    end
  end
end

編集:問題は移行ではなく、バリデータであることが判明しました。解決策は、以下の私のコメントに従って <%= f.number_field :money %> を <%= f.text_field :money %> に変更することでした。

于 2012-07-13T14:04:25.703 に答える