2

好的,所以我可能在这里遗漏了一些明显的东西。我正在使用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)

谢谢!

4

1 回答 1

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

请参阅关于 tokenfields 的 railscast #258和我的 gem标记化(虽然我目前不使用它随时报告错误,我会处理它。或者只是受到启发并自己做 :))

于 2011-10-12T07:40:50.197 回答