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

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

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

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

Ruby

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Q&A

解決済

2回答

1329閲覧

ruby on railsでuserレコードのgroup_idを参照してテンプレにgroupのnameを入れたい

kaji

総合スコア648

Ruby on Rails 5

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

Ruby

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

0グッド

0クリップ

投稿2017/11/13 14:06

編集2017/11/16 04:06
users = User.all.order('id desc').take(20) users.each do |user| user.group = Group.find(user.group_id) end @users = users
<% @users.each do |user| %> <%= user.group.name %> <% end %>

user.groupでエラーとなります。メッセージ詳細は以下の通りです

undefined method `group=' for #<User:0x00007fd8046fa390> Did you mean? group_id=

userのカラムは
id
name
group_id
で、groupというカラムはありません。

エラーメッセージをみるとgroupメソッドがないとあるのですが、確かに
カラムがないのでgroupがメソッドとして扱われ、groupメソッドもないので
そのようなメッセージになるのだと思います。

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

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

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

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

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

guest

回答2

0

ベストアンサー

UserモデルとGroupモデルの関連付けはどのようになっていますか?
例えばGroupとUserが1:nの関係の場合

ruby

1class Group < ApplicationRecord 2 has_many :users, dependent: :destroy 3end

ruby

1class User < ApplicationRecord 2 belongs_to :group 3end

このようになっていれば、自動的にUserモデルとGroupモデルがgroup_idを経由してひも付きますので、
UserモデルからGroupを参照できるかと思います。

ruby

1user.group.name

ですので、上記のように記述すれば関連付けられたオブジェクトを返してくれると思います。

投稿2017/11/16 04:37

mtdsnsk

総合スコア789

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

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

kaji

2017/11/16 21:51

できました。ありがとうござます。
guest

0

ruby

1# <%= user.group.name %> 2<% @users.each do |user| %> 3 <%= user.group.name %> 4<% end %>

ではないですか?
viewファイルから変数を参照したい場合、変数名には@が付いている必要があります。(インスタンス変数)

ちなみにですが、

ruby

1user.group = Group.find(group_id)

の部分は

ruby

1user.group = Group.find(user.group_id)

となるのではないでしょうか?
Userモデルがどのような構造になっているか分かりませんので推測になりますが、上記を試してみてください。

投稿2017/11/16 03:48

mtdsnsk

総合スコア789

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

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

kaji

2017/11/16 04:09 編集

回答ありがとうございます。 メインのコードの周りの部分も追加しました。 find(group_id)はfind(user.group_id)の記述ミスでした。 エラーメッセージ詳細とuserカラムを追加しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問