在rails中进行JQuery自动完成验证

时间:2012-01-26 16:13:40

标签: jquery ruby-on-rails autocomplete

我正在使用默认的rails验证,它会在有错误的字段中生成一个周围的红框。

所以,在帖子之后,这样的代码:

<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”值发送到服务器并在字段中显示“name”值,我会为id创建一个隐藏字段,如下所示:

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

“text_field_tag”是我的自动填充功能:

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

隐藏字段将携带服务器帖子的ID。

在此之后,如果此字段有错误(如需要),Rails不会使用神奇的div元素包围任何一个。

有任何线索吗? 感谢。

2 个答案:

答案 0 :(得分:1)

您需要使用form-helper才能获得错误突出显示。因此,如果您的验证所在,则需要f.text_field :user

答案 1 :(得分: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 %>