Ruby on rails RubyonRails文本字段,用于路由或特定网页,或显示操作而不是列表
我正在建立的网站是RubyonRails,它是关于农业设备的。我已经建立了一个输入文本字段的常规搜索页面,当使用该页面时,会列出包含关键字的所有项目 我计划做的是有一个带有引导自动完成功能的文本字段。文本字段将根据输入显示选项,当选择单个选项时,我需要将其发送到特定项目详细信息页面,即显示页面,而不是列出结果 我需要有关如何使用textfield值直接路由到items show页面的帮助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
我该怎么做呢?在评论之后,听起来你想创建某种功能,基本上使用
ajax
在keyup
上向你的后端发送请求(PHP
,Rails
,等等)
我们已经做了类似的事情(在顶部搜索):
--
实现这一目标的方法有三个方面:
- 特定的
routeajax
- 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'
})
});