У меня есть несколько моделей, что их представления индексов почти разделяют тот же самый код и макет.Как использовать один и тот же вид с несколькими моделями?
.../шоколад/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'} %>
Но это Ждут» t, похоже, работает, потому что -Я думаю -dist.class.name
deasnt возвращает значение, которое я ожидал, но возвращает "active_record/relation"
. Я пробовал один и тот же подход перед редактированием, и работал с dist: @sweet
.
Я думал об использовании макетов, но он оставил меня с большими кусками кода, которые очень похожи на другой индексный вид.
я поделился мои попытки с вами, И вопросы ...
- Что случилось с моим кодом и как это исправить?
- Этот подход считается хорошей практикой для СУХОГО кода? и если нет. Каков наилучший способ совместного использования одного и того же кода просмотра с несколькими моделями, когда эти модели почти разделяют тот же самый код и макет?
Спасибо человеку за отличный ответ, сейчас он отлично работает, Но вторая часть моей вопрос по-прежнему не ответил, так вы думаете, что это лучший подход к такому делу? Считаете ли вы, что это правильно, чтобы делиться мнениями между моделями - правильное или разумное. Я смотрел документацию «Partial», и я нашел что-то под названием «коллекция». Я сомневался, что это имеет какое-то отношение к таким случаям. Также, когда я запускал '@ sweets.model_name', он возвращал хеш с большим количеством значений, таких как именованные маршруты и другие переменные экземпляров, я также сомневался, что это может помочь. –
добавил дополнительную информацию, которая, надеюсь, поможет ... – Doon
Спасибо за вашего мужчину, последний абзац был очень полезен –