2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】partialでeachしたいな

Last updated at Posted at 2020-04-16

初めてのQiita投稿

です。
プログラミング言語はもとより、日本語すら怪しい。
(にほんうまれ、にほんそだち)

だから、なるべく簡単にかいてみるよ。
難しいことはわからないよ。

誠に遺憾なレベルのひとだから、ご指摘など大変喜ぶよ。

やりたいな

eachで回すのをベタ書きするとすごいごちゃっとするな。
partialで切り取ってスッキリさせたいな。

どう書くのかな

partialでスッキリさせたい部分はこう!

Tops/index.html.erb
<%= render partial: "blog_card", collection: @blogs %>

#### `partial: "blog_card"`ってなに?
  • 雑に翻訳するとこういうことみたいだよ
partialだよ:同じディレクトリにある_blog_card.html.erbが対象のpartialだよ

  • 同じディレクトリじゃなくて別のディレクトリ…例えばapp/views/layouts_blog_card.html.erbを入れてた場合は
Tops/index.html.erb
<%= render partial: "layouts/blog_card", collection: @blogs %>

…って書くとapp/views/layouts/_blog_card.html.erbをみに行ってくれるよ。


#### `collection: @blogs` ってなに?
  • 雑に翻訳するとこういうことみたいだよ。
eachで回したいコレクションがあるよ:Tops_controller.rbの@blogsが対象のコレクションだよ
Tops_controller.rb
def index
  @blogs = Blog.all  #ココ
end
  • 超蛇足だけれど、partialの中にコントローラやアクションの指定がないのに、collection: @blogsと書くだけでTops_controller.rbindexアクション@blogsをみてくれるのは、Tops/index.html.erbでpartialを書いているからだね。

partialはこう!

_blog_card.html.erb
<h5><%= blog_card.title %></h5>
<p><%= blog_card.body %></p>
<%= link_to "もっとみる", "/blog/#{blog_card.id}" %>

#### `@blogs.each do |blog|`はないの?
  • いつもなら↓のように書く。
<% @blogs.each do |blog| %>
  <h5><%= blog.title %></h5>
  <p><%= blog.body %></p>
  <%= link_to "もっとみる", "/blog/#{blog.id}" %>
<% end %>

#### `<%= blog_card.title%>`の`blog_card`ってどこからきた?
  • index.html.erbrenderで、collection: @blogsを書いたから、
    それだけでpartialのファイル名が変数名になるんだって。

  • 後に続く<%= blog_card.body %><%= link_to "もっとみる", "/blog/#{blog_card.id}" %>もおんなじ。


#### ちなみに - 実際はこれ。もしここにeachを書いたらあと2行ほど増えるから、partialにしちゃってよかったのかも。
_blog_card.html.erb
<div class="col-12 col-md-6">
  <div class="card mb-4">
    <h5 class="card-header"><%= blog_card.title%></h5>
    <div class="card-body">
      <p class="card-text"><%= blog_card.body %></p>
      <button type="button" class="btn btn-info">
        <%= link_to "/blog/#{blog_card.id}" do %>
          <div class="text-white btm-sm">もっとみる</div>
        <% end %>
      </button>
    </div>
  </div>      
</div>

さいごに

Railsってすごい。もっといろんなことができるようになりたいな。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?