执行AJAX搜索时出现UnknownFormat错误

时间:2017-06-18 16:18:53

标签: ruby-on-rails ajax

我希望有一个小搜索框,允许用户按名称搜索其他用户,结果显示在一个列表中的框中。就像在亚马逊这样的网站上你可以在栏中输入搜索一样,它会有一个下拉菜单,除了我的,我没有做“自动完成”(至少还没有)

但是,当我尝试搜索时,它会在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;
});

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

# routes.rb
get '/search_users', to: 'chat_rooms#search_users', as: 'search'

由于您的routes.rb指定您在search_users中有ChatRoomsController行动,而且(行动)似乎存在。

当从表单到达请求时,它会执行该操作,但由于缺少名为search_users.html.erb的模板,因此显示此错误。

解决方案

处理请求并使用错误消息中提到的模板进行响应;或者,重命名和重新设计路线和控制器。

编辑:1

  

我只想发送搜索请求,如果您明白我的意思,请将结果弹出到搜索栏下方的列表中。

如果是,请执行以下操作:

# chat_rooms_controller.rb
def search_users
  @users_results = User.search(params[:search])
  render :show
end

Plz评论,如果它没有帮助。