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

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

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

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

Ruby on Rails

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

Q&A

1回答

16028閲覧

ActiveRecord_Associations_CollectionProxy というエラーが出る。

kento2543

総合スコア163

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2015/05/23 08:52

編集2022/01/12 10:55

railsで部員一覧と、学部一覧というのをもっているwebページを作りました。

modelでの関係性は以下の通りです。

部員一覧 (member)
belongs_to 学部一覧

学部一覧 (gakubu)
has_many 部員一覧

以下はindexページの一部になりますが、tdの一行目で、各学部の名前と、その学部に所属する部員の数を取得することができました。

さらにやりたいこととしましては、その学部に所属している部員一覧を取得したいです。

例)
薬学部なら、Aさん、Bさん
経営学部なら、Cさん、Dさん・・・
法学部なら・・・・

gakubu.members
という形で行うと、
ActiveRecord_Associations_CollectionProxy という文字列が出るのですが、
ネットで調べても理解出来ませんでした。
※エラー画面がでているわけではありません。

どうやったら学部ごとの部員を取得できるのでしょうか?

現在は簡易的にindexのページに部員一覧を表示させようとしていますが、
ゆくゆくはページをわけて、部員一覧を表示させる予定です。

lang

1#gakubus/index.html.erb 2 3eachメソッドで回している。 4 5<td><%= gakubu.name %>(<%= gakubu.member.size %>)</td> 6<td><%= gakubu.members %></td> 7 8

コードをすべて書いているわけではありませんのでわかりにくいかと思いますが、
随時、質問事項には補足していきます。

宜しくお願いします。


追記

上記質問に対する回答を頂け、解決ができました。

ただ。この部員一覧を別ページにて表示させたいのですが、上手くいきませんでした。

理由がわからなくて詰まっております。
もし宜しければ、こちらにお力添え頂けないでしょうか?

※別ページというのは仮に listとする。

現在、以下のようなrouteを作りました。(rake routes で確認済み)
http://localhost:3000/gakubus/:id/list

またコントローラーにも以下の通り、記述しました。

def list @gakubu = Gakubu.find(params[:id]) end

この状態で、list.html.erbに上記ソースを転用したのですが、
上手く表示がされませんでした。

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

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

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

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

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

guest

回答1

0

cDm_48さんの出力ではおそらく"Member::ActiveRecord_Associations_CollectionProxy"と表示されていると思います。これはRailsのActiveRecordモジュールの中のクラスの1つで、has_manyで関連をもたせたときに、その関連を取得したインスタンスとなります。このインスタンスの中に関連で取得したデータが入っています。
members全員を表示するためにはもう一回eachを回さないといけないですね。

lang

1#gakubus/index.html.erb 2 3eachメソッドで回している。 4 5<td><%= gakubu.name %>(<%= gakubu.members.size %>)</td> 6<% gakubu.members.each do |member| %> 7 <td><%= member.name %></td> 8<% end %>

こんなかんじになるかと思います。

--- 追記 ---

部員一覧を別ページに表示する
おそらくroutes.rbにはこのようにコードを書いていると思います。

lang

1resources :gakubus do 2 get 'list', on: :member 3end

このルーティングについては問題ないでしょうか?

そしてGakubusControllerに def list ~ end があると思います。
ここでインスタンス変数 @gakubu を生成していると思います。
ビューの中で、先ほど回答したソースを使ってlist.html.erbを書くとこのようになります。

lang

1#gakubus/list.html.erb 2 3<td><%= @gakubu.name %>(<%= @gakubu.members.size %>)</td> 4<% @gakubu.members.each do |member| %> 5 <td><%= member.name %></td> 6<% end %>

list ビューの中では gakubu というeachで回したときにできる変数ではなく、コントローラーから渡されるインスタンス変数 @gakubu を使ってnameやmembersを取得するということになります。なので、先ほど回答したソースをそのまま使ってしまうと、表示されないかと思います。

投稿2015/05/23 12:08

編集2015/05/23 15:40
ymdu

総合スコア60

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

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

kento2543

2015/05/23 15:20

ありがとうございます。更にeachで回すと上手く表示ができました。 追加で恐縮ですが、 この部員一覧を別ページにて表示させたいです。 (仮に list とする。) 現在、以下のようなrouteを作りました。(rake routes で確認済み) http://localhost:3000/gakubus/:id/list またコントローラーにも以下の通り、記述しました。 def list @gakubu = Gakubu.find(params[:id]) end この状態で、list.html.erbに上記ソースを転用したのですが、 上手く表示がされませんでした。 理由がわからなくて詰まっております。 もし宜しければ、再度お知恵をかして頂けないでしょうか?
ymdu

2015/05/23 15:42

お力になれて光栄です! 先ほどの回答に別ページにて表示する方法について、追記させていただきました。 もし不足している情報がありましたら、言ってください!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問