当前位置: 代码迷 >> 综合 >> rails render partial的问题(collection)
  详细解决方案

rails render partial的问题(collection)

热度:56   发布时间:2023-12-14 04:39:21.0
Ruby代码  
  1. <% @paginated_hits.each_with_index do |hit, index| %>  
  2.          <%= render :partial => "search/search_item",:locals => { :hit => hit,:index =>index} %>  
  3. <% end %>  

 我在渲染partial的时候,是再外层做了循环,官方文档中有一种用法专门用来render collection的

  • index.html.erb
< h1 >Products</ h1 >
<%= render :partial => "product" , :collection => @products %>
  • _product.html.erb
< p >Product Name: <%= product.name %> </ p >

注意: 在_product.html.erb中的product.name指的是 :partial => "product", 而不是collection 指向的@products的单数,也可以通过as指定参数

<%=render :partial=> "product", :collection=> @products, :as=> :item%>

则在partial页面中可以直接使用itme

<%= itme.name %>

 

在本地做了一个简单的测试:

在index页面:

Ruby代码  
  1. <h1>Listing users</h1>  
  2.   
  3. <% @users.each do |user| %>  
  4. <%= render :partial => "your":locals =>{ :your => user} %>  
  5. <% end %>  
  6. <br />  
  7.   
  8. <%= link_to 'New User', new_user_path %>  

 _your.html.erb文件中只是简单的输出用户的名字:

 <%= your.name %>

Ruby代码  
  1. Started GET "/users" for 127.0.0.1 at 2014-03-07 00:20:24 +0800  
  2. Processing by UsersController#index as HTML  
  3.   [1m[36mUser Load (0.0ms)[0m  [1mSELECT "users".* FROM "users" [0m  
  4.   Rendered users/_your.html.erb (0.0ms)  
  5.   Rendered users/_your.html.erb (0.0ms)  
  6.   Rendered users/_your.html.erb (0.0ms)  
  7.   Rendered users/_your.html.erb (0.0ms)  
  8.   Rendered users/_your.html.erb (0.0ms)  
  9.   Rendered users/_your.html.erb (0.0ms)  
  10.   Rendered users/_your.html.erb (0.0ms)  
  11.   Rendered users/_your.html.erb (0.0ms)  
  12.   Rendered users/_your.html.erb (0.0ms)  
  13.   Rendered users/_your.html.erb (0.0ms)  
  14.   Rendered users/_your.html.erb (0.0ms)  
  15.   Rendered users/_your.html.erb (0.0ms)  
  16.   Rendered users/_your.html.erb (0.0ms)  
  17.   Rendered users/_your.html.erb (0.0ms)  
  18.   Rendered users/_your.html.erb (0.0ms)  
  19.   Rendered users/_your.html.erb (0.0ms)  
  20.   Rendered users/_your.html.erb (0.0ms)  
  21.   Rendered users/index.html.erb within layouts/application (46.9ms)  
  22. Completed 200 OK in 62ms (Views: 62.5ms | ActiveRecord: 0.0ms)  

 页面渲染用了62.5ms

 

如果在index页面这样写:

Ruby代码  
  1. <h1>Listing users</h1>  
  2.   
  3. <%= render :partial => "my":collection => @users %>  
  4.   
  5. <br />  
  6.   
  7. <%= link_to 'New User', new_user_path %>  

_my.html.erb文件中:

  <% my.name %>

 

  页面渲染只用了15.6ms

 

速度竟然差了4倍!

 

  相关解决方案