我用过这个视频http://railscasts.com/episodes/102-auto-complete-association-revised http://railscasts.com/episodes/102-auto-complete-association-revised在我的应用程序的表单中设置自动完成搜索输入。 (该视频可能仅供会员使用,所以我也会发布我的代码。本质上,它会搜索数据库(名称)的一列,并在您键入时在下拉列表中自动完成。这一切都很好,但是,我想要什么表单要做的是提交与名称相关的 ID,而不是名称本身。
我假设没有简单的方法可以仅在视图中执行此操作。任何帮助都会很棒。下面的代码,让我知道是否有任何其他代码会有帮助。
Thanks
控制器:
def game_name
game.try(:name)
end
def game_name=(name)
self.game = Game.find_by_name(name) if name.present?
end
Coffee:
jQuery ->
$('#play_game_name').autocomplete
source: $('#play_game_name').data('autocomplete-source')
视图中:
<%= f.label :game_name, "Search for a game" %>
<%= f.text_field :game_name, :class => "mlm mtm", data: {autocomplete_source: Game.order(:name).map(&:name)} %>
除了按照 @LukasSvoboda 建议执行之外,您还可以覆盖select
event http://api.jqueryui.com/autocomplete/#event-select回调,当您从下拉列表中选择一个项目时会触发该回调。在回调中,您可以将文本字段(不需要提交)设置为所选项目的“标签”,并将游戏id(需要提交)的隐藏字段的值设置为所选项目的“值”。
在咖啡中:
jQuery ->
$('#play_game_name').autocomplete
source: $('#play_game_name').data('autocomplete-source')
select: (event, ui) ->
# necessary to prevent autocomplete from filling in
# with the value instead of the label
event.preventDefault()
$(this).val ui.item.label
$('#game_id').val ui.item.value
在标记中:
<%= text_field_tag nil, nil, :id => 'play_game_name', :class => "mlm mtm", data: {autocomplete_source: Game.order(:name).map { |t| { :label => t.name, :value => t.id } } %>
<%= f.hidden_field :game_id, id: 'game_id' %> # tailor to your model
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)