我有多个模型,他们的索引视图几乎共享完全相同的代码和布局。如何与多个模型共享相同的视图?
... /巧克力/ index.html.erb
<h1 class="col-sm-12 head">Index Bases</h1>
<hr>
<% @chocolates.each do |chocolate| %>
<%= link_to chocolate do %>
<%= set_img(chocolate) %>
<% end %>
<ul>
<li><%= chocolate.name %></li>
<li><%= chocolate.position %></li>
</ul>
<hr>
<div>
<%= link_to chocolate do %>
<span class="glyphicon glyphicon-eye-open"></span>
<% end %>
<%= link_to edit_chocolate_path(chocolate) do %>
<span class="glyphicon glyphicon-edit"></span>
<% end %>
<%= link_to basis, method: :delete, data: { confirm: 'Are you sure?' } do %>
<span class="glyphicon glyphicon-remove"></span>
<% end %>
</div>
<% end %>
<hr>
<%= link_to '+ Add New Chocolate', new_chocolate_path %>
... /糕点/ index.html.erb
<h1 class="col-sm-12 head">Index Bases</h1>
<hr>
<% @sweets.each do |sweet| %>
<%= link_to sweet do %>
<%= set_img(sweet) %>
<% end %>
<ul>
<li><%= sweet.name %></li>
<li><%= sweet.position %></li>
</ul>
<hr>
<div>
<%= link_to sweet do %>
<span class="glyphicon glyphicon-eye-open"></span>
<% end %>
<%= link_to edit_sweet_path(sweet) do %>
<span class="glyphicon glyphicon-edit"></span>
<% end %>
<%= link_to sweet, method: :delete, data: { confirm: 'Are you sure?' } do %>
<span class="glyphicon glyphicon-remove"></span>
<% end %>
</div>
<% end %>
<hr>
<%= link_to '+ Add New Sweet', new_sweet_path %>
还有更多的模式,共享相同的布局,我认为我不断重复我的自我,所以我创建了一个共享部分,并在每个使用该布局的视图中呈现变量。
... /糕点/ index.html.erb
<% render 'shared/indexGrid', dist: @sweets%>
... /视图/共享/ _indexGrid.html.erb
<% title = dist.class.name.underscore.tr('_', ' ').pluralize.split.map(&:capitalize).join(' ') %>
<% sing = dist.class.name.underscore %>
<h1>Index <% title %></h1>
<hr>
<% dist.each do |sing| %>
<%= link_to sing do %>
<%= set_img(sing) %>
<% end %>
<ul>
<li><%= sing.name %></li>
<li><%= sing.position %></li>
</ul>
<hr>
<div>
<%= link_to sing do %>
<span class="glyphicon glyphicon-eye-open"></span>
<% end %>
<%= link_to send("edit_#{sing.class.name.underscore}_path", sing) do %>
<span class="glyphicon glyphicon-edit"></span>
<% end %>
<%= link_to sing, class: 'square red', method: :delete, data: { confirm: 'Are you sure?' } do %>
<span class="glyphicon glyphicon-remove"></span>
<% end %>
</div>
<% end %>
<hr>
<%= link_to "+ Add New #{title}", send("new_#{sing.class.name.underscore}_path"), { class: 'btn btn-success btn-block'} %>
,但它没”吨似乎工作,因为 - 我认为 - dist.class.name
deasnt返回我期待的价值,但返回"active_record/relation"
。 我已经尝试过与编辑视图相同的方法,它与dist: @sweet
。
我曾经想过使用布局,但它给我留下了与其他索引视图非常相似的大块代码。
我分享我尝试用你的时候,这个问题......
- 这有什么错我的代码,以及如何解决它?
- 该方法是否被认为是DRY代码的良好实践?如果不是的话当这些模型几乎共享完全相同的代码和布局时,与多个模型共享相同视图代码的最佳方式是什么?
感谢男人的伟大答案,现在工作得很好,但我的第二部分问题仍然没有答案,那么你认为这是做这种事情的最好方法吗?你认为在模型之间分享观点是正确的 - 性能明智的或如此。我在查看'Partial'文档,并且发现了一些名为'collection'的东西,我怀疑这与这种情况有关。还有,当我运行'@ sweets.model_name'时,它返回了一个包含很多值的散列,如命名的路径和其他实例变量我也怀疑它可以帮助。 –
增加了一些更多的信息,这将有助于... – Doon
谢谢你的男人,最后一段很有帮助 –