2012-01-26 3 views
0

Я использую валидации по умолчанию, которые генерируют окружение красного поля в полях с ошибками.Проверка подлинности автозаполнения JQuery в рельсах

Итак, после того, как пост, код так:

<input id="post_date" name="post[date]" type="text"> 

воля стала так:

<div class="field_with_errors"> 
    <input id="post_date" name="post[date]" type="text"> 
</div> 

так, с помощью простого CSS мы можем установить красную границу:

.field_with_errors input{border: 1px red} 

Моя проблема началась, когда я поместил поле автозаполнения в свою форму. Для того, чтобы отправить «ID» значение на сервер и показать «имя» значение в поле, создать скрытое поле для идентификатора, например:

<p> 
    <%= f.label :user %> 
    <%= f.hidden_field :user_id%> 
    <%= text_field_tag :user %> 
</p> 

Где «text_field_tag» мое автозаполнение:

$("input#user").autocomplete({...}); 

И скрытое поле будет содержать идентификатор для серверной почты.

После этого, если в этом поле есть ошибка (как и требуется), Rails не окружает ни одно из них магическим элементом div.

Любые подсказки об этом? Спасибо.

ответ

1

вам нужно будет использовать форму-помощник, чтобы получить подсветку ошибок. так что вам нужно будет f.text_field :user, если вы подтвердите свою валидацию.

+0

Это не работает, потому что он пытается отправить поле имя пользователя (тот, который отображается) в поле идентификатора , – Beetlejuice

+0

, независимо от того, насколько это работает, это то, что вам нужно, когда вы не рельсы, чтобы выделить его. в противном случае вам нужно добавить сами классы css. в этом случае вам нужно посмотреть на '@ user.errors' или' f.error_messages' взгляд на руководства для более подробной информации. http://guides.rubyonrails.org/active_record_validations_callbacks.html#displaying-validation-errors-in-the -Посмотреть – phoet

0

Вы можете сделать что-то подобное:

<div class="<%= object.errors[:user].present? ? 'field_with_errors' : '' %>"> 
Your text_field_tag with autocomplete 
</div> 

Пример:

<div class="<%= object.errors[:user].present? ? 'field_with_errors' : '' %>"> 
    <%= text_field_tag nil, default, :id => 'user_email_autocomplete', data: {autocomplete_source: User.order(:email).map { |t| {:label => t.email, :value => t.id} }} %> 
</div> 
<%= f.hidden_field :user_id %> 
Смежные вопросы