На самом деле простой вопрос - как мне использовать text_field_with_auto_complete внутри блока form_for?
Я пробовал делать f.text_field_with_auto_complete, но это дает ошибку, и простое использование text_field_with_auto_complete, похоже, ничего не дает.
Я что-то упустил?





Если вы намерены установить поле идентификатора, вы должны:
отображать результаты в элементах LI, каждый из которых имеет идентификатор DOM, равный идентификатору возвращаемой записи, например:
<UL>
<LI ID = "1">Item 1</LI>
< LI ID = "2">Item 2< /LI>
</UL>
Ваше текстовое поле будет выглядеть примерно так:
<%= text_field_with_auto_complete :model, :method, {}, :after_update_element => ‘getSelectionId’ % >
и метод javascript с именем getSelectionId, подобный этому
function getSelectionId(text, li) {
alert (li.id);
}
обратите внимание, что вы можете делать что угодно с помощью javascript, поскольку у вас есть текст и элемент li.
Другой вариант - этот плагин
Я лично использую это:
<%= f.text_field :name, :autocomplete => "off" %><div class = "auto_complete" id = "customer_name_auto_complete"></div>
И вручную добавьте автоматически сгенерированные Javascript и CSS. Вот Javascript:
new Ajax.Autocompleter('customer_name', 'customer_name_auto_complete', '/customers/auto_complete_for_customer_name', {
method:'get',
paramName:'customer[name]',
minChars: 3
});
а вот CSS:
div.auto_complete {
width: 350px;
background: #fff;
}
div.auto_complete ul {
border:1px solid #888;
margin:0;
padding:0;
width:100%;
list-style-type:none;
}
div.auto_complete ul li {
margin:0;
padding:3px;
}
div.auto_complete ul li.selected {
background-color: #ffb;
}
div.auto_complete ul strong.highlight {
color: #800;
margin:0;
padding:0;
}
Даже в блоке form_for вы должны указать полную модель, потому что она используется для создания обратного вызова Ajax. Также в пустом хэше, указанном Рикардо, вы можете передать дополнительные параметры в поле автозаполнения, включая «: token» и т. д.
У меня тоже была эта проблема, но решение, которое я использовал, может не подходить к вам.
Поскольку объект, который я запрашивал в автозаполнении, принадлежал другой модели, я использовал field_for как это, что решило проблему автозаполнения.
<% fields_for :model, @formobject.model do %>
<p>
<%= text_field_with_auto_complete :object, :field, :skip_style => true %>
</p>
<% end %>
Удачи!
Пару месяцев назад я написал плагин, который позволяет вам вызывать метод "text_field_with_auto_complete" непосредственно на fields_for или form_for. Идея заключалась в том, чтобы поддерживать текстовые поля, которые появляются в форме более одного раза, путем создания уникальных идентификаторов, позволяющих работать JavaScript, но это также может помочь решить вашу проблему или, по крайней мере, дать вам некоторые новые идеи.
См .: http://github.com/pat11639/repeated_auto_complete
... и эта статья для подробностей о том, как это работает: http://patshaughnessy.net/2008/10/31/modifying-the-autocomplete-plugin-to-allow-repeated-fields