У меня есть модель 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
У меня нормальный вид, с:
<%= 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>
</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
Если я отправляюсь в браузер и загружаю представление (/ clients / new), я ввожу client_id и имя, выбираю офис, а затем нажимаю "Отправить". Валидатор неправильно выбирает :client_id
, так как он всегда будет с ошибками «слишком короткие» или «слишком длинные».
Кикер в том, что он выдаст мне «слишком короткую» ошибку, пока я не попробую около 11 символов, затем при 12 символах я получу «слишком длинную». Таким образом, 11 является пороговым значением «слишком короткого», даже если диапазон должен быть «5,7», но иногда вместо «слишком длинного» сообщения оно фактически проверяет и вставляет запись, но записывает ее У «insert_id» совершенно другой номер для «client_id», и он всегда один и тот же, несмотря на validates_uniqueness_of
.
Я думаю, что происходит, что :client_id
вместо проверки действительного поля client_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
, но не получил абсолютно никакой проверки)