我在更改特定模型属性(即钱)的数据类型时遇到问题。 Money是一个整数 - 我正在尝试使用迁移将其更改为十进制,精度为5,标度为2.执行迁移后,控制台中的所有内容都显示正常(即,迁移似乎有效) ,但是当我在Web应用程序中将值更改为小数时,我会收到“无效值”消息。出于某种原因,错误似乎发生在客户端(这是一个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 %>
有什么想法?在此先感谢您的帮助!
答案 0 :(得分:3)
不确定,但请尝试:
class ChangeDataTypeForUserMoney < ActiveRecord::Migration
def change
change_table :users do |t|
t.decimal :money, :precision => 5, :scale => 2
end
end
end
编辑:原来问题不在于迁移,而在于验证器。解决方案是改变:&lt;%= f.number_field:money%&gt;至&lt;%= f.text_field:money%&gt;根据我在下面的评论。