form_for中的text_field_with_auto_complete

时间:2008-10-28 20:45:46

标签: ruby-on-rails ruby

真正的简单问题 - 如何在text_field_with_auto_complete块中使用form_for

我尝试过f.text_field_with_auto_complete,但这会产生错误,只是单独使用text_field_with_auto_complete似乎没有做任何事情。

我在这里错过了什么吗?

5 个答案:

答案 0 :(得分:6)

我个人用这个:

<%= 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;
}

答案 1 :(得分:3)

几个月前我写了一个插件,允许您直接在text_field_with_auto_completefields_for上调用“form_for”方法。我们的想法是通过生成唯一的ID以支持javascript工作来支持在表单中出现多次的文本字段,但它也可能有助于解决您的问题,或者至少为您提供一些新的想法。

请参阅:http://github.com/pat11639/repeated_auto_complete

...以及本文详细了解其工作原理:http://patshaughnessy.net/2008/10/31/modifying-the-autocomplete-plugin-to-allow-repeated-fields

答案 2 :(得分:1)

如果你想设置一个id字段,你必须:

  1. 在LI项中呈现结果,每个li都将DOM ID设置为返回记录的id,如下所示:

    <UL>
           <LI ID="1">Item 1</LI>
           < LI ID="2">Item 2< /LI>
    </UL>
    
  2. 您的文字字段如下:

    <%= text_field_with_auto_complete :model, :method, {}, :after_update_element => ‘getSelectionId’ % >
    
  3. 和一个名为getSelectionId的javascript方法,如下所示

    function getSelectionId(text, li) {
    
    alert (li.id);
    
    }
    
  4. 请注意,您可以通过javascript执行任何操作,因为您可以使用文本和li元素。

    另一个选项是this plugin

答案 3 :(得分:1)

即使在form_for块中,您也需要指定完整模型,因为它用于构造Ajax回调。同样在Ricardo列出的空哈希中,您可以将其他选项传递给自动填充字段,包括“:token”等。

答案 4 :(得分:0)

我也有这个问题,但我使用的解决方案可能不适用于你。

由于我在自动完成中查询的对象属于不同的模型,我使用了像这样的fields_for,这解决了自动完成问题。

<% fields_for :model, @formobject.model do %>
<p>
<%= text_field_with_auto_complete :object, :field, :skip_style => true %>
</p>
<% end %>
祝你好运!

相关问题