2014-09-01 94 views
0

我的課程貢獻belongs_to用戶。我有一個新的貢獻,其中包括用於給誰的貢獻將屬於用戶搜索欄形式 -Rails - 將json中的搜索結果呈現爲表格

在/contributions/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 

我控制器試圖渲染一個頁面 - 我如何讓它返回我想要的視圖的結果?

回答

1

你可以寫:

render json: { users: @users.to_json } 
+0

我'非常確定它的javascript是錯誤的 - 添加上面的代碼會導致頁面顯示散列{「users」:「null」} - 但這是一個改進。我要關閉這個,並重新說明q我認爲 - 但感謝您的幫助:) – RADan 2014-09-01 14:01:26

+0

@RADan看看我的回答 – Aguardientico 2014-09-01 14:03:15

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

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); 
     } 
    }); 
}); 
+0

嗨 - 我做了你所建議的改變,但我仍然得到路由到/ contributions/search只包含以下html - '

{"users":"null"}
' - 這真的很奇怪。 – RADan 2014-09-01 14:52:19