用于呈现AJAX请求结果的Rails 5文件命名约定

时间:2016-10-05 02:13:17

标签: ruby-on-rails ajax

我们假设有一个名为 City 的模型,我们制作一个搜索表单来搜索模型中可用城市的名称。

是否有必要将因AJAX请求而呈现的部分命名为仅_city.html.erb如果是,为什么?如果没有,那么我们如何将文件命名为其他内容并使用它?也许人们需要为模型使用多个AJAX情境,例如添加城市,搜索等,因此它们都会渲染相同的部分,这可能不是开发人员所希望的。

我尝试了不同的名字,但除此之外什么也没有用 我的搜索路线为/cities_searchGET方法映射到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 %>

2 个答案:

答案 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 %>");