2014-09-29 71 views
2

我试图使用https://github.com/peterwillcn/rails4-autocompleterails4-autocomplete。在自动填充字段中获取关联名称

添加自动完成字段我有一个属于城市的主题模型。城市属于国家。即城市=伦敦。那么city.country.name =英格兰。

我可以让我的自动完成与

#controller 
class TripsController < ApplicationController 
    autocomplete :city, :name 

#view 
<%= f.autocomplete_field :city_id, autocomplete_city_name_trips_path %> 

显示城市的名字,但我希望国家名称的自动完成秀场了。即伦敦,英国。不只是伦敦。

有没有更好的方法来做到这一点?

编辑:这也传递城市名称到控制器,我想它通过city_id

回答

1

如果你已经得到了国家在另一个领域则是自动完成的非常的方便。你想使用update_elements选项在您的视图来告诉自动完成等领域需要要填写什么。

<%= f.autocomplete_field :city, 
     autocomplete_department_name_incidents_path, 
     update_elements: {country: '#trips_country'} %> 

在上面的代码片段的#trips_country是该领域的表单中的ID,你想更新。 country:是自动完成为您提供的额外数据。

所以你还需要到您的表,告诉自动完成抢其他数据。

autocomplete :city, :name, extra_data: [:country] 

这就是如果一切都在相同的模型将工作。我从来没有试过使用自动完成从一个不同的模型拉数据,所以我不知道它是否会工作。希望这足以推动你的发展。

+0

谢谢,我会添加一列到我的城市模型。我如何在自动完成中显示名称,但将ID发送到控制器? – 2014-09-29 13:58:32

+0

您想将ID发送给控制器,以便您可以从数据库中获取正确的对象,对吗?想到的一个想法是用ID填充隐藏字段。我最近使用的自动完成功能是在我的控制器中使用了Model.find_or_create_by(field1:value_from_form,field2:value_from_form)。在我的情况下,我想创建一个对象,如果它不存在的话,但如果它确实存在的话找到它。 – 2014-09-29 14:03:56

+0

在向城市模型添加列之前,只需尝试从父模型中获取国家/地区。 'autocomplete:city,:name,extra_data:[:country]'。除非你知道上面的代码块不起作用,否则我不会去添加新的列。 – 2014-09-29 14:05:41

0

的rails4,自动完成宝石有权选择display_value这是你想要使用什么。

class TripsController < ApplicationController 
    autocomplete :city, :name, display_value: :name_with_country 

然后在City模型

def name_with_country 
    name + ', ' + country.name 
end