質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

2回答

1816閲覧

[RubyonRails]二つのデータベースから連携した情報をとり出したい

7hikolin

総合スコア124

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/03/16 08:39

以下のような二つのデータベースから情報をとり出したいです。
userデータベースのicon_idがiconデータベースのidと連携しています。

###users

idicon-idnamestatus
1123たけしfree
2141だいきpro
3153ななこpro
4165ゆうすけfree
5203あずさfree

###icons

idimage_urlimage_url_s
123http://~.jpghttp://~s.jpg
124http://~.jpghttp://~s.jpg
125http://~.jpghttp://~s.jpg
126http://~.jpghttp://~s.jpg
127http://~.jpghttp://~s.jpg
128http://~.jpghttp://~s.jpg



まずpro版に登録してるuserの一覧を取ってきて、そこからuserのicon_idに対応するimage_urlの一覧を取り出します。

ruby

1STATUS_FREE = "free" 2STATUS_PRO = "pro" 3 4@users = User.where(status: STATUS_PRO).all 5 6@users.each do |user| 7 image = Icon.find_by_id(user.icon_id).image_url 8 #? 9 #?この部分のゴニョゴニョを知りたい 10end

こうして取り出したデータをViewでこのような感じで対応させて並べて表示させたいです。

erb

1<% @users.each do |user| %> 2 <p>名前: <%= user.name %></p> 3 <img src="<%= image %>" /> 4<% end %> 5 6#ViewのイメージPro版のユーザー 7#だいき http://~.jpg(だいきのアイコン) 8#ななこ http://~.jpg(ななこのアイコン)

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ruby

1 @users.each do |user| 2 image = Icon.find_by_id(user.icon_id).image_url

というコードがControllerに書かれているという前提で回答しますが、image変数の頭に@がありませんので、image変数はViewに渡されません。また、上の回答の方法だとeachメソッドで<%= user.image.image_url %>を呼び出すたびにSQLが発行され、N+1問題が起きると思います。

N+1問題を回避するには、以下のようにすれば良いと思います。

ruby

1#Controller側 2 @users = User.where(status: STATUS_PRO).includes(:icon)

ruby

1#View側 2 <% @users.each do |user| %> 3 <p>名前: <%= user.name %></p> 4 <img src="<%= user.icon.image_url %>" /> 5 <% end %>

なお、usersiconsのアソシエーションの設定次第で、User.where(status: STATUS_PRO).includes(:icon):iconの部分が変わります。
もし上手くいかない際は、:iconの部分を:iconsにしてみてください。それでもダメなら、Modelでどのようにアソシエーションを定義したかを示してください。

投稿2017/02/18 10:15

s-show

総合スコア203

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Ruby

1@users = User.includes(:icons).where(status: STATUS_PRO).all
<% @users.each do |user| %> <p>名前: <%= user.name %></p> <img src="<%= user.image_url %>" /> <% end %>

正しくassociationされてれば

<% @users.each do |user| %> <p>名前: <%= user.name %></p> <img src="<%= user.image.image_url %>" /> <% end %>

でも取れそうですが。

投稿2016/03/16 08:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問