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

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

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

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

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

1回答

630閲覧

[Rails5]アソシエーションで関連付けたテーブルから値を取得したい

michinori

総合スコア12

Ruby on Rails 5

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

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2020/04/03 09:22

実現したい事
・関連付けたGroupモデル及びUserモデルにて、Groupモデルからuserテーブルのnameカラムを取得したいです。

現状
・上記2つのテーブルを中間テーブル(GroupUser)で関連付けました。
・コンソールにて値が渡せていることは確認済みです。

問題点
下記の様な変数とview側で配列処理を叩きましたがエラーが出ます。

controller

1 2Groupscontroller 3 4def edit 5@group = Group.where(params[:group_id] 6end

views

1edit.html.erb 2 3<% @group.group_users.each do |group_user| %> 4<%= group_user.user.name %> 5<% end %>
NoMethodError in Groups#edit Showing /app/app/views/groups/edit.html.erb where line #2 raised: undefined method `group_users' for #<Group::ActiveRecord_Relation:0x00007f08723727c0>

試した事

1.本質的に違うかもしれませんが「where」メソッドを「find」メソッドにかえ変数に代入しましたが今度は「Couldn't find Group with 'id'=」と怒られました。

2.色々と調べていくうちに外部キー(全く理解できてません)についての文献を見つけ「optional: true」を叩きましたが効果なしでした。

当該コード(rb)

user

1class User < ApplicationRecord 2 has_secure_password 3 4 has_many :groups, through: :group_users 5 has_many :group_users 6 7 before_save { self.email = email.downcase } 8 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i 9 10 validates :name, 11 presence: true, 12 uniqueness: true, 13 length: {maximum: 16} 14 15 16 validates :email, 17 presence: true, 18 length: {maximum: 120}, 19 format: {with:VALID_EMAIL_REGEX}, 20 uniqueness: true 21 22 validates :password, 23 length: { minimum: 6} 24end

group

1class Group < ApplicationRecord 2 has_many :users, through: :group_users 3 has_many :group_users 4 has_many :post 5 6 7 validates :name, 8 presence: true, 9 uniqueness: true 10 11end
class GroupUser < ApplicationRecord belongs_to :user, optional: true belongs_to :group, optional: true end

console

1> GroupUser.all 2 GroupUser Load (9.0ms) SELECT `group_users`.* FROM `group_users` 3=> #<ActiveRecord::Relation [#<GroupUser id: 1, user_id: 6, group_id: 26, created_at: "2020-04-02 03:46:09", updated_at: "2020-04-02 03:46:09">, #<GroupUser id: 2, user_id: 6, group_id: 27, created_at: "2020-04-02 04:52:21", updated_at: "2020-04-02 04:52:21">]> 4irb(main):002:0> 5

お聞きしたい事

1 当該「Nomethod」エラーがなぜ発生するのか。

2 また「find]メソッドにて値を取得しようとした際はなぜ「Couldn't find Group with 'id'=」と怒られてしまうのか。

お手数ですが頭打ちの状態ですのでご教授頂ければ幸いです。
上記コード外に問題がありそうならば迅速に当該コードを貼り付けさせて頂きますので宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ひとまず下記を試してみてはいかがでしょうか?

ruby

1#controller 2 3def edit 4@group = Group.where(params[:group_id]) ←カッコを追加する 5end

投稿2020/04/03 09:42

no1knows

総合スコア3365

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

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

michinori

2020/04/03 09:46

ご回答ありがとうございます。 申し訳ありません記述ミスで付け忘れていましたが、 (params[:group_id]) となっております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問