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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

732閲覧

中間テーブルの値の取得方法

hogeee

総合スコア27

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/03/06 07:59

family に属する tama, pochi, ichiro, yokoは表示できるのですが、 familyに属さない人全員の名前を表示したいです。どうすれば良いですか?

familyに属さないpersonを@hogeの中に入れて、view側で@hogeをeach文で@hoge.nameとして全員表示したいです。

controller

1def show 2 @family = Family.find(params[:id]) 3 @persons = @family.persons 4 5 @hoge = FamilyPerson.where.not(family_id: paramsp[:id]) 6 7end

view

1<% @pserns.each do | person | %> 2 <%= person.name %> 3<% end %> 4 5<% @hoge.each do | person | %> 6 <%= person.name %> 7<% end %>

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

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

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

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

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

makox0105

2020/03/06 08:29

なんかエラー出てます? paramspになっているからというオチはないですよね?
hogeee

2020/03/06 08:40

すみません。paramspは書き間違えでvscodeの方のコードは大丈夫です。 @hoge = FamilyPerson.where.not(family_id: params[:id]) では中間テーブルにあるfamily_idカラムのあたいは取れますが、その後、取得した値を頼りにperson.nameをviewに表示したいのですが、コードがわかりません。
makox0105

2020/03/06 08:52

中間テーブルのモデル名は何ですか? ちょっと全体像が見えてないので。
hogeee

2020/03/06 08:56

family_person.rb class FamilyPerson < ApplicationRecord belongs_to :person belongs_to :family end です!! 情報不足ですみません。
makox0105

2020/03/06 09:44

family_personのカラム名は何があるのですか?
hogeee

2020/03/06 09:50

id, person_id, family_id, created_at, updated_at です
makox0105

2020/03/06 10:06

何度もすみません、ということはfamily.nameとperson.nameが存在してpersonには全員、familyはファミリーが入っているという解釈で合ってますか?
hogeee

2020/03/06 10:39

family モデルには、nameカラムがあり、 person モデルにも nameカラムがあります。
hogeee

2020/03/06 10:40

上記のカラム以外にカラムはありません。
guest

回答1

0

ベストアンサー

<% @hoge.each do | person | %> <%= person.name %> <% end %>

ここで nameなんてないよというエラー出ません?
@hogeはFamilyPersonなので、nameってないですよね?

def show : @hoge = FamilyPerson.includes(:person).where.not(family_id: paramsp[:id]) <% @hoge.each do | family_person | %> <%= family_person.person.name %> <% end %>

.includes(:person) は入れなくても動きますが、1+N対策です。

ああ、、、、
これだと同じpersonが何度もでてきてしまうな。
@hoge = Person.joins(:family_persons).distinct.where.not("famiry_persons.famiry_id": params[:id])でviewの方はそのまま、かな

投稿2020/03/07 00:55

winterboum

総合スコア23401

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

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

hogeee

2020/03/07 06:03

はい、nameというカラムはないというエラー出てました! うーん、表示されません!エラーは出ないのですが、familyに属していないpersonが表示されません。
winterboum

2020/03/07 07:42

どちらの方法でやりました?
hogeee

2020/03/07 10:25

サーバーを再起動させたら表示が変わりました。エラーがでて、NoMethodError、 undefined method `person' と出ました。 <% @hoge.each do | family_person | %> <%= family_person.person.name %> *この行が赤いです <% end %>
hogeee

2020/03/07 10:53

@hoge = Person.joins(:family_persons).distinct.where.not("famiry_persons.famiry_id": params[:id]) こっちでやりました。
winterboum

2020/03/07 10:59

そちらでやるなら <% @pserns.each do | person | %> <%= person.name %> <% end %> です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問