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

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

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

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

Ruby on Rails 6

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

1691閲覧

Rails 中間テーブルを利用・保存した値をviewで表示させる

mit-mihohim

総合スコア2

Ruby

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

Ruby on Rails 6

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

1グッド

0クリップ

投稿2020/06/22 17:52

前提・実現したいこと

プログラミング初学者で、現在、アイテムを登録管理できるアプリを制作しております。
アイテムにタグ付けをして保存、詳細ページにて付与されたタグを中間テーブルを介して、指定カラムの値をViewにて表示させたいのですが、カラム指定したにも関わらず、全カラムの値が表示されてしまいます。解決策が見つからず、こちらで質問させていただきます。拙い説明となりますが、アドバイスよろしくお願い致します。

  • "item"に中間テーブルを介して付与された"tag.name"を"view"で表示させる
  • 1つの"item"に複数の”tag”が付属している
  • 複数のタグを表示させる為、each文を使い表示させている
  • ruby 2.5.1
  • Rails 6.0.3.1

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

  • 各タグの情報を取り出すことはできているが、nameカラムの情報のみの取得ができていない
  • 配列になっているtagを正しく取り出せていない

view画面キャプチャ

該当のソースコード

ruby

1# item/show.html.haml 2# 問題部分抜粋 3 4= @item.tags.each do |tag| 5 = tag.name 6 7# ~省略

ruby

1# itemsコントローラー 2class ItemsController < ApplicationController 3 before_action :set_item, only: [:show, :edit, :update, :destroy] 4 before_action :return_to_root_path, except: :top, unless: :user_signed_in? 5 6 def index 7 @items = current_user.items 8 end 9 10 def show 11 12 end 13 14# ~省略 15 16 17 private 18 19 def return_to_root_path 20 redirect_to root_path, alert: "ログインが必要です" 21 end 22 23 def set_item 24 @item = Item.find(params[:id]) 25 end 26 27 def item_params 28 params.require(:item).permit(:image, :season, :color, :text, tag_ids:[]).merge(user_id: current_user.id) 29 end 30end
  • 保存&取得自体はできているので、アソシエーションに問題はないかと思いますが、下記テーブル、モデル情報掲示致します。

ruby

1# Tagsテーブル 2class CreateTags < ActiveRecord::Migration[6.0] 3 def change 4 create_table :tags do |t| 5 t.string :name, null: false 6 7 t.timestamps 8 end 9 end 10end

ruby

1# Tagモデル 2class Tag < ApplicationRecord 3 has_many :item_tags, dependent: :destroy 4 has_many :tags, through: :item_tags, dependent: :destroy 5end 6

ruby

1# ItemTagsテーブル(中間テーブル) 2class CreateItemTags < ActiveRecord::Migration[6.0] 3 def change 4 create_table :item_tags do |t| 5 t.references :item, null: false, foreign_key: true 6 t.references :tag, null: false, foreign_key: true 7 8 t.timestamps 9 end 10 end 11end

ruby

1# ItemTagモデル 2class ItemTag < ApplicationRecord 3 belongs_to :item 4 belongs_to :tag 5end

ruby

1# Itemモデル 2class Item < ApplicationRecord 3 belongs_to :user 4 has_one_attached :image, dependent: :destroy 5 has_many :item_tags, dependent: :destroy 6 has_many :tags, through: :item_tags, dependent: :destroy 7# ~省略 8end

試したこと

@item.tag_ids の記述でidのみを取得する事はできましたができましたが、each文にてtag.nameを記述しても、nameだけではなく、レコードのデータ全てが配列に入る形で表示されてしまいます。
下記、も試してみましたが、取り出す事はできませんでした。
@tags = Tag.find(@item.tag_ids).tags.flat_map(&:name)

初歩的な、間違いだったら、申し訳ないですが、手詰まりのため、どうぞよろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

jusco1988👍を押しています

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

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

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

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

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

guest

回答1

0

自己解決

先ほど、投稿してすぐで、申し訳ないのですが、無事解決できました!

慣れてきていたはずの、hamlの記述間違いでした。

ruby

1# 誤 2= @item.tags.each do |tag| 3 = tag.name

ruby

1# 正 2- @item.tags.each do |tag| 3 = tag.name

投稿2020/06/22 18:10

mit-mihohim

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問