初めてのQiita投稿
です。
プログラミング言語はもとより、日本語すら怪しい。
(にほんうまれ、にほんそだち)
だから、なるべく簡単にかいてみるよ。
難しいことはわからないよ。
誠に遺憾なレベルのひとだから、ご指摘など大変喜ぶよ。
やりたいな
eachで回すのをベタ書きするとすごいごちゃっとするな。
partialで切り取ってスッキリさせたいな。
どう書くのかな
partialでスッキリさせたい部分はこう!
<%= render partial: "blog_card", collection: @blogs %>
#### `partial: "blog_card"`ってなに?
- 雑に翻訳するとこういうことみたいだよ
partialだよ:同じディレクトリにある_blog_card.html.erbが対象のpartialだよ
- 同じディレクトリじゃなくて別のディレクトリ…例えば
app/views/layouts
に_blog_card.html.erb
を入れてた場合は
<%= render partial: "layouts/blog_card", collection: @blogs %>
…って書くとapp/views/layouts/_blog_card.html.erb
をみに行ってくれるよ。
#### `collection: @blogs` ってなに?
- 雑に翻訳するとこういうことみたいだよ。
eachで回したいコレクションがあるよ:Tops_controller.rbの@blogsが対象のコレクションだよ
def index
@blogs = Blog.all #ココ
end
- 超蛇足だけれど、partialの中にコントローラやアクションの指定がないのに、
collection: @blogs
と書くだけでTops_controller.rb
のindexアクション
の@blogs
をみてくれるのは、Tops/index.html.erb
でpartialを書いているからだね。
partialはこう!
<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 %>
-
だけど、
Tops/index.html.erb
のrender
で、collection: @blogs
を書いたから、
partialの中でeachしなくても、コレクション(collection:
)の@blogs
を勝手に1個ずつ取り出して処理してくれるんだって。
Railsってすごいね。 -
こんな理由もあるんだって
#### `<%= blog_card.title%>`の`blog_card`ってどこからきた?
-
index.html.erb
のrender
で、collection: @blogs
を書いたから、
それだけでpartialのファイル名が変数名になるんだって。 -
後に続く
<%= blog_card.body %>
も<%= link_to "もっとみる", "/blog/#{blog_card.id}" %>
もおんなじ。
#### ちなみに - 実際はこれ。もしここにeachを書いたらあと2行ほど増えるから、partialにしちゃってよかったのかも。
<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ってすごい。もっといろんなことができるようになりたいな。