前提・実現したいこと
プログラミング初学者で、現在、アイテムを登録管理できるアプリを制作しております。
アイテムにタグ付けをして保存、詳細ページにて付与されたタグを中間テーブルを介して、指定カラムの値をViewにて表示させたいのですが、カラム指定したにも関わらず、全カラムの値が表示されてしまいます。解決策が見つからず、こちらで質問させていただきます。拙い説明となりますが、アドバイスよろしくお願い致します。
- "item"に中間テーブルを介して付与された"tag.name"を"view"で表示させる
- 1つの"item"に複数の”tag”が付属している
- 複数のタグを表示させる為、each文を使い表示させている
- ruby 2.5.1
- Rails 6.0.3.1
発生している問題・エラーメッセージ
- 各タグの情報を取り出すことはできているが、nameカラムの情報のみの取得ができていない
- 配列になっているtagを正しく取り出せていない
該当のソースコード
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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。