私は、複数のモデルを持っています。それらのインデックスの表示は、まったく同じコードとレイアウトを共有しています。複数のモデルで同じビューを共有するにはどうすればよいですか?
... /チョコレート/ 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'} %>
しかし、それはなかったの私は思っていた値を返すが、"active_record/relation"
を返します。 編集ビューでこれまでと同じ方法を試しましたが、それはdist: @sweet
で機能しました。
私はレイアウトを使用することを考えましたが、他のインデックスビューに非常に似ている大きなまとまりのコードを私に残しました。
- 何私のコードで間違っているとどのようにそれを修正するために...
は、私はあなたと私の試みを共有している、との質問がありますか?
- このアプローチはDRYコードの良い習慣と考えられますか?もしそうでなければ、複数のモデルと同じビューコードを共有する最良の方法は、それらのモデルがほぼ同じコードとレイアウトをほぼ共有している場合です。
偉大な回答をいただきありがとうございました。質問はまだ答えられていないので、これはそのようなことを行うための最良のアプローチだと思いますか?賢明なやり方のようなモデル間で意見を共有することはまったく正しいと思いますか?私は 'Partial'のドキュメントを見ていましたが、私は疑問に思った' collection'というものを見つけました。 '@ sweets.model_name'を実行したときに、named routsのように多くの値を持つハッシュを返しました私がそれが助けることができるかどうか疑問に思った。 –
はもう少し情報を追加しました。うまくいけば助けてくれるでしょう... – Doon
あなたのおかげで、最後の段落は非常に役に立ちました –