我第一次尝试提交表单时收到错误
“价格不是有效数字”
第二次尝试提交它时没关系(在价格字段中使用相同的有效数据)。 如果我不在模型中添加验证,则提交表单,但不保存价格值。
可能发生什么事? .decimal字段有什么特别之处吗?
db schema:
t.decimal "price"
模型
validates :price, numericality: { :greater_than => 0, :less_than_or_equal_to => 100000000 }
表单视图文件
<%= f.number_field :price, class: "short red" %>
控制器
def new
@product = Product.new
end
def create
@product = Product.new(product_params)
if @product.save
redirect_to @product
else
render :new
end
end
private
def product_params
params.require(:product).permit(:name, :description, :image, :price, :user_id)
end
日志
于2014-10-15 22:56:51 +0000开始为xxx.132发布“/ products” ProductsController处理#创建为HTML
参数:{“utf8”=&gt;“✓”, “authenticity_token”=&gt; “中abte / LtO0T / ZtSXQIuXVVjjUvwHw5jDUJ1yIKCOWRx2 =”, “product”=&gt; {“name”=&gt;“”,“description”=&gt;“”,“user_id” =&gt;“1”},“commit”=&gt;“提交”}
答案 0 :(得分:1)
您可以检查的一些事项:
表单中的代码段从f.number_field开始。检查您是否在表单顶部使用<%= form_for(@product) do |f| %>
之类的内容。
尝试使用rails控制台创建产品。
在rails控制台中,尝试以下方法:
> p = Product.new
> p.valid?
#=> TRUE or FALSE should appear
> p.errors.full_messages.to_sentence
# you should see a full list of all failed validations from your Product model
如果这些没有帮助,请尝试将整个product_controller.rb和_form.html.erb文件粘贴到您的问题中,我将再次查看。
答案 1 :(得分:0)
尝试将迁移更改为:
t.decimal :price, precision: 8, scale: 2 #for example
然后,将验证更改为:
validates :price, numericality: {greater_than_or_equal_to: 0.01, :less_than_or_equal_to => 100000000 }
在PostgreSQL中,下一个实现行为:十进制列:
PostgreSQL :: precision [1..infinity],:scale [0..infinity]。没有 默认值。
我希望,这个例子来自&#34;敏捷Web开发与Rails 4&#34;帮助您理解十进制数的验证:
可以在此字段中输入0.001等数字。因为 数据库只存储小数点后的两位数,这个 最终会在数据库中为零,即使它会通过 验证,如果我们比较零。检查号码是否为 至少1美分确保只存储正确的值。