Rails - 将json中的搜索结果呈现给表单

时间:2014-09-01 13:42:30

标签: ruby-on-rails json ruby-on-rails-4

我的班级贡献属于用户。我有一个新的贡献表格,其中包括一个搜索字段,供该贡献所属的用户使用 -

/ ptributions/new.html.erb中的

-

<%= text_field_tag :search, params[:search], id: "search" %>
<%= link_to "Search", search_contributions_path, id: "search_submit" %>

在application.js.erb

$(document).on("click", "a#search_submit", function(){
   $.ajax({
      url: $(this).attr("href"),
      data: {query: $("#search").val() },
      success: function(data) {
        var user = $.parseJSON(json);
      }
   });
});

并在contribution_controller.rb中 -

def search
    @users = User.search(params[:search])
    render :users => @users.to_json
end

我的控制器正在尝试渲染页面 - 如何让它返回我想要的视图结果?

4 个答案:

答案 0 :(得分:1)

你可以写:

    render json: { users: @users.to_json }

答案 1 :(得分:0)

respond_to不会解决这个问题吗?像

这样的东西
respond_to :html, :xml, :json

取决于你想要“回应”的格式,显然。

这是来源http://apidock.com/rails/ActionController/MimeResponds/ClassMethods/respond_to

答案 2 :(得分:0)

您必须在控制器中使用以下内容:

respond_to :html, :xml, :json

你可以按以下方式返回json:

respond_to do |format|
  format.json { render json: @users.result() }
end

或者如下:

render json: { :users => @users.result().to_json }

我认为您使用ransak进行搜索,因此您需要使用@users.result().to_json代替@users.to_json

答案 3 :(得分:0)

该问题与json无关,您的问题与javascript更改您的ajax调用有关:

$(document).on("click", "a#search_submit", function(e){
   e.preventDefault();
   $.ajax({
      url: $(this).attr("href"),
      data: {query: $("#search").val() },
      success: function(data) {
        var user = $.parseJSON(json);
      }
   });
});