【问题标题】:JQuery autocomplete validation in railsRails 中的 JQuery 自动完成验证
【发布时间】:2012-01-26 16:13:40
【问题描述】:

我正在使用默认的 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 元素包围其中的任何内容。

有什么线索吗? 谢谢。

【问题讨论】:

    标签: jquery ruby-on-rails autocomplete


    【解决方案1】:

    您需要使用表单助手来获得错误高亮。所以你需要f.text_field :user,如果那是你验证的地方。

    【讨论】:

    • 这不起作用,因为它试图将用户的姓名字段(显示的那个)作为 id 字段发送。
    • 无论这是否有效,当您不想用轨道突出显示它时,您需要做的就是这样做。否则你需要自己添加css类。在这种情况下,您需要查看@user.errorsf.error_messages 查看指南以获取更多详细信息guides.rubyonrails.org/…
    【解决方案2】:

    你可以这样做:

    <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 %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      相关资源
      最近更新 更多