我们假设有一个名为 City 的模型,我们制作一个搜索表单来搜索模型中可用城市的名称。
是否有必要将因AJAX请求而呈现的部分命名为仅_city.html.erb
?如果是,为什么?如果没有,那么我们如何将文件命名为其他内容并使用它?也许人们需要为模型使用多个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 :(得分:1)
<%= j render @foundcities %>
这是使得必须具体命名部分的部分。只需在一组对象上调用render
,就可以使用该对象的默认命名方案(使用类名)。如果你想要不同的东西,那么你尝试使用不同的render
例如
render :partial => 'my_partial_name', :locals => {:found_cities => @foundcities}
请注意,您需要在部分中引用局部变量found_cities
而不是全局@foundcities
(它也是铁道上的惯例,更喜欢snake_case
而不是jammedtogetherwordscase
);)
答案 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 %>");