验证关联的自动完成输入

时间:2011-02-12 03:28:05

标签: ruby-on-rails jquery-ui formtastic

好的,所以我可能会遗漏一些明显的东西。我正在使用rails3-jquery-autocompleteformtastic来允许用户在创建项目时选择类别:

class Category < ActiveRecord::Base
  has_many :items
end

class Item < ActiveRecord::Base
  belongs_to :category

  validates :category_id, :presence => true
end

我通过以下方式解决了这个问题:

semantic_form_for @item do |form|
  form.inputs do
    form.input :category_id, :as => :hidden
    form.autocompleted_input :category, 
                             :url => autocomplete_category_path, 
                             :id_element => "#item_category_id"
  end
end

一切都很好,花花公子;当用户选择类别名称时,category_id进入隐藏字段,并且项目保存得适当。

但是,当用户未输入/选择有效类别时,我会遇到问题。验证以下情况的适当方法是什么:

  1. 用户在有效类别的框中输入内容。 (这需要失败。它现在失败,但内联错误实际上在隐藏字段上)
  2. 用户进行选择,然后将文本字段的值更改为无效类别(导致隐藏字段中的ID变为陈旧。这也应该失败,但它会使用陈旧的选定Id)
  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

好像你正在寻找jQuery Tokeninput。 您只需通过REST提供类别,或将JSON包含在初始化

$("#mytokeninputfield").tokenInput("/categories.json",
  {
   tokenLimit: 1 // allow at most 1 item
  });

<input type="text" id="mytokeninputfield" name="item[category_tokens]" data-pre="<%= @user.category_id %>"/>

请参阅railscast #258 on tokenfields和我的宝石tokenizes(虽然我目前不使用它随时报告错误,我会照顾它。或者只是得到启发并在你自己的:))