1

我使用的是rails3-jquery-autocomplete創建的寶石here.我在查詢一張用戶表,並希望下拉菜單顯示名稱旁邊的用戶個人資料圖像。我有一個User模型和一個多態的Image模型。每個用戶:has_one圖像。在圖像模型中,我使用回形針附加圖像,在模型中稱爲picrails3-jquery-autocomplete:在結果列表中顯示圖像?

rails3-jquery-autocomplete gem在文檔中說我可以在控制器中指定:display_value。我正在使用這種技術,它工作正常;也就是說,我有一個返回值的自定義方法,並且它可以正確返回。該自定義方法位於User模型中,通過正確設置gem。我想要做的是返回:tiny版本的用戶圖像,並在下拉列表中將其顯示在名稱的左側。下面的顯示方法工作得很好:

def autocomplete_list_display 
    "#{full_name}" 
end 

我試着做到以下幾點:

def autocomplete_list_display 
    i = self.image 
    "#{image_tag(i.pic(:tiny))}" + " #{full_name}" 
end 

我得到的錯誤

NoMethodError (undefined method 'image_tag' for #<User id: 4, full_name: "My Name">): 

如果我離開了image_tag()一部分,則圖像的URL正確顯示。我似乎無法得到此呈現爲呈現HTML,但是,即使使用它的.html_safe方法。請注意,我也試過以下,但它並沒有呈現爲HTML:

def autocomplete_list_display 
    i = self.image 
    "<img src='#{i.pic(:tiny)}' />" 
end 

我怎樣寫一個:display_value...方法,讓我在結果中嵌入HTML和顯示名稱旁邊的用戶形象?這可以通過該方法完成,還是必須在JavaScript中完成? (在後一種情況下,如何修改.js文件以顯示圖像?)

回答

2

HTML會被jQuery轉義。根據the jQuery Autocomplete documentation,您可以使用Scott González' html extension來防止發生。然後

$(".selector").autocomplete({ html: true }); 

,無論你DISPLAY_VALUE函數返回將呈現爲HTML:

如果你在項目中包含該擴展,你可以爲你自動完成字段設置自動完成HTML選項設置爲true。