如何告诉我的Rails控制器使用我的方法的format.json部分而不是format.html分支?

时间:2018-01-29 22:26:41

标签: ruby-on-rails json jquery-ui autocomplete controller

我正在运行Rails并尝试在我的文本字段中设置自动填充功能。我想提交一个控制器方法。如果我从我的表单提交(使用"提交"按钮),我想使用" format.html"科。如果我使用自动完成Ajax调用提交,我想使用" format.json"分支...

  def search
    if params.has_key?("s")
      search = params[:s].strip
      @people = Person.where("name ilike ?", "%#{search.upcase}%")
      respond_to do |format|
        format.html {
          if @people.size == 1
            redirect_to controller: 'votes', action: 'show', id: @people.first.id
          end
        }
        format.json { @people.map(&:name) }
      end
    end
  end

我在文本字段中设置了自动填充功能

$(function() {
  return $('#s').autocomplete({
    source: function(request, response) {
        $.get('/people/search', { s: request.term }, function(data) {
           alert(data)
           response(data.split('\n'));
        });
    }
  });
});

但正在发生的是"数据"是一个HTML页面,就像我通过format.html方法提交一样。如何配置,以便我的自动完成调用强制我从控制器呈现JSON响应?

1 个答案:

答案 0 :(得分:1)

在网址中指定.json格式,如下所示 -

$.get('/people/search.json', { s: request.term }, function(data) {
   alert(data)
   response(data.split('\n'));
});

发送原始json数据在Controller中更改。否则它将寻找模板来构建json(默认情况下rails会查找search.json.jbuilder)

format.json { render json: {people: @people.pluck(:name)} }