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

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

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

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

Ruby

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

Q&A

解決済

1回答

760閲覧

他モデルのカラムの値を取得したいです

manami0419

総合スコア10

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2020/09/26 08:21

前提・実現したいこと

合コンマッチングアプリを作成中です。
つまり、複数人対複数人のマッチングアプリです。
トップページにグループの情報を表示しようとしています。
その際にcurrent_userが男性なら女性グループの情報を、女性なら男性グループの情報を表示したいです。

この実装で使っている主なテーブルは、UserテーブルとUserInfoテーブルです。
Userテーブルにはユーザーの情報(名前、性別、etc)が、UserInfoテーブルにはグループ情報(人数、写真、etc)が記載されています。1人のuserが1つのuser_infoを投稿できるというイメージです。

発生している問題・エラーメッセージ

SyntaxErrorが表示されています。

index.html.erb

・ ・(省略) ・ <div class="top_page"> <h2>現在ログインしているグループ一覧!</h2> <ul class="groups"> <% @user_infos.each do |user_info| %> <li class="list"> <div class='user_infos'> <div class="user_img"> <%= image_tag user_info.image.variant(resize:'400x400'), class: "user_img" if user_info.image.attached? %> <% if user_signed_in? && user_info.user_id != current_user.id %> <%= link_to 'フォローする', "#", class: "follow_btn" %> <% end %> <% unless user_signed_in? %> <%= link_to 'フォローする', new_user_session_path, class: "follow_btn" %> <% end %> <div class="top"> <p class="nickname"><%= user_info.user.nickname %>|</p> <p class="area"><%= user_info.area_id %>|</p> <p class="people_num"><%= user_info.people_num_id %>人</p> </div> <div class="down"> <p class="user_info_text"><%= user_info.text %></p> </div> </div> </div> </li> <% end %> </ul> </div>

user_infos_controller.rb

ruby

12・(省略) 34def index 5 if current_user.gender == "女" 6 @user_infos = UserInfo.where(user.gender: "男") 7 set_user_info_column 8 elsif current_user.gender == "男" 9 @user_infos = UserInfo.where(gender: "女") 10 set_user_info_column 11 end 12end 1314・(省略) 15

コードの説明、試したこと

genderカラムはUserテーブルに記載してあります。
なのでUserInfoでgenderカラムの情報を取得したい場合、Userテーブルを経由しないといけません。ここがわからないところです( ; ; )

コントローラーの、
@user_infos = UserInfo.where(user.gender: "男")
をいろいろ試しました。
特にWHERE句を、where(user_info.user.gender: "男")など変更してみましたが、取得できませんでした。

補足情報

UserモデルとUserInfoモデルのアソシエーションはできています。

どなたか教えていただけると幸いです。
よろしくお願いいたします。

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

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

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

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

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

winterboum

2020/09/26 13:40

エラーが表示されているなら、それを載せてください
manami0419

2020/09/27 04:04

すみません、返信遅くなりました。。 いろいろ試行錯誤していたので、その時のエラー文はどんなのができていたかわからなかったです( ; ; ) ただ今回は解決できました! 次からエラー文も載せて、より伝わるようにさせていただきます! 今回は返信してくださりありがとうございました( ´ ▽ ` ) また機会がありましたら、よろしくお願いいたします1
guest

回答1

0

ベストアンサー

全量見れてませんが、UserInfo.where(user.gender: "男")はsyntax errorになりますね。キーワード引数のキーにドットは含むことができないためです。

やりたいことはこうですかね。たぶん。UserとUserInfoの関連が正しく設定できていれば動くと思います。

ruby

1@user_infos = UserInfo.joins(:user).where(users: { gender: "男"})

https://railsguides.jp/active_record_querying.html#%E7%B5%90%E5%90%88%E3%81%95%E3%82%8C%E3%81%9F%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%A7%E6%9D%A1%E4%BB%B6%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B

投稿2020/09/26 14:01

編集2020/09/27 03:21
my_oji

総合スコア39

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

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

manami0419

2020/09/27 03:12

ご回答ありがとうございます! user_infoコントローラーのindexアクションを以下のように編集しました。 ```ruby def index if current_user.gender == "女" @user_infos = UserInfo.joins(:user).where(user: { gender: "男"}) set_user_info_column elsif current_user.gender == "男" @user_infos = UserInfo.joins(:user).where(user: { gender: "女"}) set_user_info_column end end ``` この結果、 ActiveRecord::StatementInvalid in UserInfos#index Showing /Users/yuta/projects/sugu/app/views/user_infos/index.html.erb where line #57 raised: Mysql2::Error: Unknown column 'user.gender' in 'where clause' Extracted source (around line #57): <h2 class="login_now">現在ログインしているグループ一覧!</h2> <ul class="groups"> <% @user_infos.each do |user_info| %> ←57行目 <li class="list"> <div class='user_infos'> <div class="user_img"> Rails.root: /Users/yuta/projects/sugu Application Trace | Framework Trace | Full Trace app/views/user_infos/index.html.erb:57 というエラーが出ました。 下記がそのビューです。 ```html <div class="top_page"> <h2 class="login_now">現在ログインしているグループ一覧!</h2> <ul class="groups"> <% @user_infos.each do |user_info| %> <li class="list"> <div class='user_infos'> <div class="user_img"> <!-- ネットのフォローボタン --> <%= image_tag user_info.image.variant(resize:'400x400'), class: "user_img" if user_info.image.attached? %> <% if user_signed_in? && user_info.user_id != current_user.id %> <% if user_info.favorited_by?(current_user) %> <!-- ログインしているユーザーがファボしたかどうかで分岐 --> <p class="follow_btn"><%=link_to "お気に入り済", user_info_favorites_path(user_info.id), class: "white", method: :delete %></p> <% else %> <p class="follow_btn"><%=link_to "お気に入り", user_info_favorites_path(user_info.id), class: "white", method: :post %></p> <% end %> <% end %> <!-- ネットのフォローボタン --> <div class="top"> <p class="nickname"><%= user_info.user.nickname %>|</p> <p class="area"><%= user_info.area_id %>|</p> <p class="people_num"><%= user_info.people_num_id %>人</p> </div> <div class="down"> <p class="user_info_text"><%= user_info.text %></p> </div> </div> </div> </li> <% end %> </ul> </div> ``` userモデルとuserinfoモデルは1対1の関係で、ネストは組んでいません。 ネストを組んでいないからこのようなエラーが出ているのでしょうか?( ; ; ) 読みづらくて申し訳ないのですが、ご回答いただけたら幸いです。 よろしくお願いいたします。
manami0419

2020/09/27 03:14

ごめんなさい、マークダウンで返信できていないです。。( ;∀;)
my_oji

2020/09/27 03:22

失礼しました????コード間違っていたので修正しました。user -> usersにしています。whereの中のキーは、テーブル名にする必要があるのでした。joins(:user)はそのままです。
manami0419

2020/09/27 04:02

whereの中のキーをusersに変えたところ、表示されました! ありがとうございます、助かりました( ´ ▽ ` ) 画面遷移した際に変更したindexのところでエラーが出るのですが、それは一旦自分でがんばってみます!
my_oji

2020/09/27 06:33

やりたいことと困っていることがちゃんと書いてあったのでアドバイスしやすかったです!頑張ってください????応援しています!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問