我已使用此视频
http://railscasts.com/episodes/102-auto-complete-association-revised在我的应用的表单中设置自动填充搜索输入. (该视频可能只适用于会员,所以我也会发布我的代码.基本上它会搜索数据库(名称)的列并在键入时自动填充下拉列表.这一切都正常,但是,我想要的是要执行的表单是提交与名称相关的ID,而不是名称本身.
我假设在视图中没有简单的方法可以做到这一点.任何帮助都会很棒.下面的代码,让我知道是否有任何其他代码会有所帮助.
谢谢
控制器:
def game_name game.try(:name) end def game_name=(name) self.game = Game.find_by_name(name) if name.present? end
咖啡:
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建议之外,您还可以覆盖选择
event回调,当您从下拉列表中选择项目时会触发该回调.在回调中,您可以将文本字段(不需要提交)设置为所选项目的“标签”,并将游戏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',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