2014-09-29 69 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