gpt4 book ai didi

ruby-on-rails - Rails validates_length_of 行为异常

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:12 27 4
gpt4 key购买 nike

我有一个要添加验证的 Rails 模型,我似乎遇到了其中一个验证器的一些奇怪问题。

这是我正在使用的表(来自 schema.rb):

  create_table "clients", :force => true do |t|
t.string "name"
t.string "last_contact"
t.integer "contacting_agent"
t.date "last_payment_date"
t.float "last_payment_amt"
t.datetime "created_at"
t.datetime "updated_at"
t.string "office"
t.integer "client_id"
end

我有一个普通的 View ,有:

<%= error_messages_for 'client' %>
<h1>New Client</h1>
<% form_for @client do |new| %>

<table id='newform'>
<tr>
<th>Field</th>
<th>Value</th>
</tr>
<tr>
<td>
ID
</td>
<td>
<%= new.text_field :client_id %>
</td>
</tr>
<tr>
<td>
Name
</td>
<td>
<%= new.text_field :name %>
</td>
</tr>
<tr>
<td>
Office
</td>
<td>
<%= new.select :office, $offices %>
</td>
</tr>
<tfoot>
<tr>
<td>
<%= image_submit_tag "/images/icons/save_32.png" %>
<a href="/clients/new" title="Clear"><%= image_tag "/images/icons/close_32.png" %></a>
</td>
<td>
&nbsp;
</td>
</tr>
</tfoot>
</table>

<% end %>

和我不起眼的模特

class Client < ActiveRecord::Base
validates_length_of :client_id, :in => 5..7
validates_uniqueness_of :client_id
validates_presence_of :name, :client_id
end

因此,让我头疼的部分是模型中的第一个验证。

validates_length_of :client_id, :in => 5..7

如果我前往浏览器并加载 View (/clients/new),我输入一个 client_id 和一个名称,选择一个办公室,然后点击提交。验证器没有正确获取 :client_id,因为它总是会失败并显示“太短”或“太长”的错误消息。

问题是,在我尝试大约 11 个字符之前,它会给我“太短”的错误,然后在 12 个字符时,我得到“太长”的错误。所以 11 是“太短”的阈值,即使范围应该是“5..7”——但有时它实际上会验证并插入记录而不是“太长”消息,而是记录它inserts 对“client_id”有一个完全不同的数字,而且它总是相同的,尽管 validates_uniqueness_of

我认为正在发生的是 :client_id,而不是验证实际字段 client_id,它试图获取对象 ID 并验证它。至少,这是我唯一能想到的。

  Parameters: {"x"=>"13", "y"=>"14", "authenticity_token"=>"removed", "client"=>{"name"=>"test345", "client_id"=>"12345678", "office"=>"US10"}}

以上,根据服务器日志,验证为 :client_id“太短”

那么请问,有什么办法可以纠正这种怪异现象吗?(注意:我尝试了 validates_length_of "client_id", :in => 5..7 但完全没有得到验证)

最佳答案

client_id 列是整数。 validates_length_of 使用 size 方法找出字段的长度,对于整数,它只给出变量的大小(以字节为单位),前 11 个“字符”可能为 4 "和 8 代表 12+。

如果您确实需要 client_id 为整数并验证长度,您可以使用:

validates_inclusion_of :client_id, :in => 10000..9999999, :message => "should be between 5 and 7 characters"

关于ruby-on-rails - Rails validates_length_of 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2731248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com