2016-10-05 36 views
0

我們假設有一個名爲City的模型,我們製作搜索表單以搜索模型中可用城市的名稱。用於渲染AJAX請求結果的Rails 5文件命名約定

是否有必要命名將僅作爲_city.html.erb命名爲AJAX請求結果的部分?如果是這樣,爲什麼?如果沒有,那麼我們如何命名該文件並使用它?也許需要爲模型使用多個AJAX情況,例如添加城市,搜索等,以便它們都呈現相同的部分,這可能不是開發人員所期望的。

我嘗試了不同的名稱,但除此之外沒有任何工作。
我的查找路線是/cities_search使用GET的方法映射爲cities#search
我的JS文件名是search.js.erb

在index.html.erb:

<%= form_tag cities_search_path, method: :get, remote: true do %> 
    <%= text_field_tag :search, nil, required: true %> 
    <%= submit_tag 'Search', name: nil%> 
<% end %> 
Search: 
<div id="search-results"> 

</div> 

JS代碼:

$("#search-results").empty(); 
<% if @foundcities %> 
    $("#search-results").append("<%= j render @foundcities %>"); 
<% else %> 
    $("#search-results").append("No city found"); 
<% end %> 
+0

請提供您的觀點和JS代碼 –

+0

這取決於你的動作名稱 –

+0

@MoatazZaitoun新增 –

回答

1

<%= j render @foundcities %>這是使得有必要專門命名的部分的部分。通過在對象集合上調用render,您正在使用該對象(使用類名稱)的默認命名方案。如果你想要不同的東西,那麼你嘗試使用不同的render

render :partial => 'my_partial_name', :locals => {:found_cities => @foundcities} 

注意,您需要參考的局部變量:在您的局部found_cities而不是全局@foundcities

(也很一個公約在軌道偏好snake_case優於jammedtogetherwordscase);)

+0

感謝您的解釋。我嘗試了你的方法,它的工作原理,但是如果我在文件中寫入其他任何東西,比如IF條件或樣式,什麼都不會出現(儘管我可以在我的原始代碼中完成它,但我的IF條件和樣式也一樣這:'<%if @foundcities%><%= \t @ foundcities.name%> <% end %>') –

+0

我不知道我理解那個問題.. (也可能算作一個新問題......不能改變部分的原始問題是固定的)。你可以創建一個新的問題基於這個,幷包括一個代碼示例等?你可以參考這個問題,讓它們連接起來。此外,如果您在此處發佈鏈接至新問題,我會收到通知,並可以查看:) –

+1

對不起,我會在發出新問題時通知您。謝謝:) –

0

很多的渲染選項。在這種情況下,您想要:

render :partial => 'partial_name', :collection => @foundcities 

然後,部分文件將被命名爲「_partial_name.html.erb」。在js.erb文件,你會做這樣的事情:

<% result = @foundcities ? render(:partial => 'partial_name', :collection => @foundcities) : "No city found" %> 
$("#search-results").html("<%= j result %>"); 
+0

我在我的JS-'$(「#search-results」)中試過這個。append(「<%= render:partial =>'cities/search',:collection => @foundcities%>」);'在終端上,它告訴部分被渲染,但沒有顯示。我刪除了':collection'屬性,我可以使用'<%= @ foundcities.name%>打印「,但我無法像文件條件或樣式那樣在文件中寫入任何其他內容。 –

+0

在javascript/jquery中,append函數需要一個轉義字符串。添加到答案... – Swards

+0

對不起,延遲,它仍然無法正常工作。我會提出一個新的問題。 –