9
12

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 5 years have passed since last update.

トップページなどから特定のモデルの内容を一括表示したい

Last updated at Posted at 2015-11-27

#はじめに

 環境はRuby2.0.0、Rails4.2.1。

 特定のモデルの内容(例:ユーザーの氏名、メールアドレス等)を一括表示する方法が複数あるようなので、それぞれの書き方、相違点についてまとめてみた。動作はどのコードも同じである。

#render @users を利用した方法
 これは一番手軽な方法である。最新版のRails Tutorialなどでも紹介されているが、手軽な分動作がわかりにくく、初心者は利用を控えた方がよいかもしれない。

###例

index.html.erb

//あらかじめcontrollerで@users = User.allと定義しておく
//また、app/views/usersに_userパーシャルを用意しておく
<%= render @users %>

これだけで十分である。renderに複数形の@からはじまるオブジェクトの配列を渡すと自動的にそれを_userパーシャルでレンダリングして表示してくれる。for each文も必要ない。

#render 'users/user', user: userを利用した方法
 これはやや面倒だが、明示的に動作を指定しているのでわかりやすい。

###例

index.html.erb

<% @users.each do |user| %>
   <%= render 'users/user', user: user %>
<% end %>

 user: userとしている部分では、userオブジェクトをuserという名前でパーシャルに渡している。例えばこれをobject: userとした場合userオブジェクトはobjectという名前でパーシャルから参照することができる。
 また、この場合はRailsが自動的にviews/usersディレクトリを見てくれないので、それをこちらが指定しておく。

#render(:partial => 'users/user', :object => user)

 これはよりActionViewらしい書き方である。:localsなどのオプション(パーシャル内部で別のローカル変数を参照したい時に使う)を利用したい時もこの書き方の場合はコードが書きやすい。

###例

index.html.erb

<% @users.each do |user| %>
   <%= render(:partial => 'users/user', :object => user)
<% end %>

 この場合、userはuserという名前でしかパーシャルからはアクセスできない。別の名前でアクセスしたい場合はさらに:as => :objectのように指定してやる必要がある。

#参考資料

 英文だがこちらが一番わかりやすい。
http://apidock.com/rails/ActionController/Base/render

#おわりに

 初歩的なrenderの仕様だが、和文の資料が少なく、非常に理解しづらかった。Railsを利用しているなら皆すでに知っている内容だと思うが、自分のような初学者にとってこのエントリが助けとなれば幸いである。

2016.02.10
コード部分にfor eachという謎の文法があったのを修正(自分でこの内容を改めて試していて気付いた)
この程度のViewしかないと、こうも堂々と誤っていても指摘をもらえないということがわかった。

2016.03.20
似たような内容がここに詳細に書かれていたのを発見した。非常に参考になるのでぜひ。

9
12
0

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
9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?