我在更改特定模型属性(即金钱)的数据类型时遇到问题。金钱是一个整数——我正在尝试使用迁移将其更改为小数,精度为 5,小数位数为 2。迁移后,控制台中的一切看起来都正常(即迁移似乎有效) ,但是当我在网络应用程序中将值更改为小数时,我收到“无效值”消息。由于某种原因,错误似乎发生在客户端(它是一个 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 %>
有什么想法吗?在此先感谢您的帮助!