Проверка автозаполнения ввода для ассоциаций - PullRequest
2 голосов
/ 12 февраля 2011

Хорошо, так что я, вероятно, здесь упускаю что-то очевидное.Я использую rails3-jquery-autocomplete и formtastic , чтобы позволить пользователю выбрать категорию при создании элемента:

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. Пользователь делает выбор, а затем изменяет значение текстового поля на недопустимую категорию (в результате идентификатор вскрытое поле становится устаревшим. Это также должно завершиться ошибкой, но вместо этого используется устаревший выбранный идентификатор)

Спасибо!

1 Ответ

0 голосов
/ 12 октября 2011

Похоже, вы ищете 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 на полях токенов и мой gem также токенизирует (хотя яв настоящее время не используйте его, не стесняйтесь сообщать об ошибках, и я позабочусь об этом. Или просто вдохновитесь и сделайте это самостоятельно :))

...