我正在使用找到的rails3-jquery-autocomplete
gem here.我正在查询用户表,并希望下拉列表显示该名称旁边的用户个人资料图片。我有一个User
模型和一个多态Image
模型。每个用户:has_one
图片。在图像模型中,我使用回形针附加图像,在模型中称为pic
。
文档中的rails3-jquery-autocomplete
gem表示我可以在控制器中指定:display_value
。我正在使用这种技术,它工作正常;也就是说,我有一个返回值的自定义方法,并且它被正确返回。根据gem的正确设置,该自定义方法在User模型中。我想要做的是返回用户图像的: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()
部分,则图像的网址会正确显示。我似乎无法将其显示为呈现的HTML,但是,即使使用.html_safe
方法也是如此。注意,我也尝试了以下内容,但它没有呈现为HTML:
def autocomplete_list_display
i = self.image
"<img src='#{i.pic(:tiny)}' />"
end
如何编写:display_value...
方法,允许我在结果中嵌入HTML并在名称旁边显示用户图像?这可以通过该方法完成,还是必须在javascript中完成? (在后一种情况下,如何修改.js文件以显示图像?)
答案 0 :(得分:2)
HTML被jQuery转义。根据{{3}},您可以使用the jQuery Autocomplete documentation来防止这种情况发生。
如果您在项目中包含该扩展程序,则可以为自动填充字段将autocomplete html选项设置为true:
$( ".selector" ).autocomplete({ html: true });
然后,无论您的display_value函数返回什么,都将呈现为HTML。