Ruby on rails RubyonRails文本字段,用于路由或特定网页,或显示操作而不是列表

Ruby on rails RubyonRails文本字段,用于路由或特定网页,或显示操作而不是列表,ruby-on-rails,ruby,twitter-bootstrap,autocomplete,Ruby On Rails,Ruby,Twitter Bootstrap,Autocomplete,我正在建立的网站是RubyonRails,它是关于农业设备的。我已经建立了一个输入文本字段的常规搜索页面,当使用该页面时,会列出包含关键字的所有项目 我计划做的是有一个带有引导自动完成功能的文本字段。文本字段将根据输入显示选项,当选择单个选项时,我需要将其发送到特定项目详细信息页面,即显示页面,而不是列出结果 我需要有关如何使用textfield值直接路由到items show页面的帮助 我该怎么做呢?在评论之后,听起来你想创建某种功能,基本上使用ajax在keyup上向你的后端发送请求(PHP

我正在建立的网站是RubyonRails,它是关于农业设备的。我已经建立了一个输入文本字段的常规搜索页面,当使用该页面时,会列出包含关键字的所有项目

我计划做的是有一个带有引导自动完成功能的文本字段。文本字段将根据输入显示选项,当选择单个选项时,我需要将其发送到特定项目详细信息页面,即显示页面,而不是列出结果

我需要有关如何使用textfield值直接路由到items show页面的帮助


我该怎么做呢?

在评论之后,听起来你想创建某种功能,基本上使用
ajax
keyup
上向你的后端发送请求(
PHP
Rails
,等等)

我们已经做了类似的事情(在顶部搜索):

--

实现这一目标的方法有三个方面:

  • 特定的
    ajax
    route
  • Javascript来处理
    keyup
  • 控制器发送响应的操作
我知道这并不完全是你想要的,但希望它能为你指明正确的方向


路线

#config/routes.rb
resources :controller do
    collection do
        get "search(/:query)" #-> domain.com/controler/search/your_query
    end
end
控制器

#app/controllers/your_controller.rb
class YourController < ApplicationController
    respond_to :json, :js, :html

    def search
       @response = Model.where value: params[:query]
       respond_with @response
    end
end

你想用ajax显示搜索结果吗?不,实际上我需要的是链接,所以当点击时,它会转到特定项目的详细信息页面。你使用的是什么版本的引导?
#app/assets/javascripts/jquery.livesearch.js
// Author: Ryan Heath
// http://rpheath.com

(function($) {
  $.searchbox = {}

  $.extend(true, $.searchbox, {
    settings: {
        url: 'search',
        param: 'search',
        dom_id: '#livesearch',
        minChars: 2,
        loading_css: '#livesearch_loading',
        del_id: '#livesearch_del'
    },

    loading: function() {
        $($.searchbox.settings.loading_css).show()
    },

    idle: function() {
        $($.searchbox.settings.loading_css).hide()
    },

    start: function() {
      $.searchbox.loading()
      $(document).trigger('before.searchbox')
    },

    stop: function() {
      $.searchbox.idle()
      $(document).trigger('after.searchbox')
    },

    kill: function() {
        $($.searchbox.settings.dom_id).fadeOut(50)
        $($.searchbox.settings.dom_id).html('')
        $($.searchbox.settings.del_id).fadeOut(100)
    },

    reset: function() {
        $($.searchbox.settings.dom_id).html('')
        $($.searchbox.settings.dom_id).fadeOut(50)
        $('#SearchSearch').val('')
        $($.searchbox.settings.del_id).fadeOut(100)
    },

    process: function(terms) {

        if(/\S/.test(terms)) {
            $.ajax({
                    type: 'GET',
                    url:  $.searchbox.settings.url,
                    data: {search: terms.trim()},
                    complete: function(data) {  
                        $($.searchbox.settings.del_id).fadeIn(50)
                        $($.searchbox.settings.dom_id).html(data.responseText)

                        if (!$($.searchbox.settings.dom_id).is(':empty')) {
                            $($.searchbox.settings.dom_id).fadeIn(100)
                        }

                        $.searchbox.stop();
                    }
                });
            return false;
        }else{
            $.searchbox.kill();
        }
    }
  });



    $.fn.searchbox = function(config) {
        var settings = $.extend(true, $.searchbox.settings, config || {})

        $(document).trigger('init.searchbox')
        $.searchbox.idle()

        return this.each(function() {
            var $input = $(this)

            $input
            .keyup(function() { 
                if ($input.val() != this.previousValue) {

                    if(/\S/.test($input.val().trim()) &&  $input.val().trim().length > $.searchbox.settings.minChars){ 
                        $.searchbox.start()
                        $.searchbox.process($input.val())
                    }else{
                        $.searchbox.kill()
                    }

                    this.previousValue = $input.val()

                }
            })
        })
    }
})(jQuery);


#app/assets/javascripts/application.js
//Livesearch
$(document).ready( function() {
    var base_url = window.location.protocol + "//" + window.location.host;

    $('#SearchSearch').searchbox({
        url: base_url + '/search/',
        param: 'search',
        dom_id: '#livesearch',
        loading_css: '#livesearch_loading'
    })      
});