我希望有一个小搜索框,允许用户按名称搜索其他用户,结果显示在一个列表中的框中。就像在亚马逊这样的网站上你可以在栏中输入搜索一样,它会有一个下拉菜单,除了我的,我没有做“自动完成”(至少还没有)
但是,当我尝试搜索时,它会在ChatRoomsController#search_users中显示“ActionController :: UnknownFormat”,并附有解释:
ChatRoomsController#search_users is missing a template for this request
format and variant. request.formats: ["text/html"] request.variant: []
NOTE! For XHR/Ajax or API requests, this action would normally respond
with 204 No Content: an empty white screen. Since you're loading it in a
web browser, we assume that you expected to actually render a template,
not nothing, so we're showing an error to be extra-clear. If you expect
204 No Content, carry on. That's what you'll get from an XHR or API
request. Give it a shot.
所以似乎是说这个不是一个AJAX请求,但是我几乎已经从RailsCast上复制了我的代码来进行AJAX搜索(只删除了一些分页位),所以这个困惑我。
以下是我的代码的相关部分:
# chat_rooms/show.html.erb
<%= form_tag search_path, :id => "search", :method => 'get' do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search for User", :name => nil, class: "button-butt" %>
<% end %>
<% for result in @users_results %>
<%= result.name %>
<% end %>
和控制器:
# chat_rooms_controller.rb
def search_users
@users_results = User.search(params[:search])
end
模型的搜索方法:
# user.rb
def self.search(term)
where('name LIKE ?', "%#{term}%")
end
我认为我的路由没问题,但万一它不是:
# routes.rb
get '/search_users', to: 'chat_rooms#search_users', as: 'search'
最后,javascript:
#application.js
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
$("#search input").keyup(function() {
$.get($("#search").attr("action"), $("#search").serialize(), null, "script");
return false;
});
任何帮助都将不胜感激。
答案 0 :(得分:1)
# routes.rb
get '/search_users', to: 'chat_rooms#search_users', as: 'search'
由于您的routes.rb
指定您在search_users
中有ChatRoomsController
行动,而且(行动)似乎存在。
当从表单到达请求时,它会执行该操作,但由于缺少名为search_users.html.erb
的模板,因此显示此错误。
处理请求并使用错误消息中提到的模板进行响应;或者,重命名和重新设计路线和控制器。
我只想发送搜索请求,如果您明白我的意思,请将结果弹出到搜索栏下方的列表中。
如果是,请执行以下操作:
# chat_rooms_controller.rb
def search_users
@users_results = User.search(params[:search])
render :show
end
Plz评论,如果它没有帮助。