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

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

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

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

Ruby

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

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

Ruby on Rails

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

Q&A

0回答

428閲覧

acts-as-taggable-onのタグ機能を利用して、イベント投稿ごとにタグを表示させたい

koh4168

総合スコア11

Ruby on Rails 5

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

Ruby

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

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

Ruby on Rails

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

0グッド

0クリップ

投稿2019/07/10 06:42

編集2019/07/10 08:03

前提・実現したいこと

rails初心者です。
acts-as-taggable-onを導入し、イベントごとにタグを表示させたいです。
イベント投稿欄にタグを追加できるようにしました。タグがdbに保存されるところまではうまくいきました。

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

投稿を増やしていくたびに、今まで投稿したタグが全てイベント詳細画面に表示されてしまいます。
イベント投稿時につけたタグだけを詳細画面に表示させたいです。
おそらく、イベントとタグの紐付けができていない点、タグを繰り返し処理で全て取得してしまっていることが原因だと思うのですが、解決法がいまいちわかりません。
もしよろしければ、手助けお願いいたします。

gemfile

ruby

1gem 'acts-as-taggable-on', github: 'mbleigh/acts-as-taggable-on', branch: 'master'

app/models/event.rb

ruby

1class Event < ApplicationRecord 2 belongs_to :user 3 mount_uploader :image, ImageUploader 4 validates :image,:name,:place,:text,:scedule, presence: true 5 acts_as_taggable_on :information 6 acts_as_taggable #acts_as_taggable_on :tags のエイリアス 7end 8

app/controllers/events_controller

ruby

1class EventsController < ApplicationController 2 before_action :move_to_index, except: [:index, :show] 3 4 def index 5 @events = Event.includes(:user).order("created_at DESC ").page(params[:page]).per(10) 6 end 7 8 def new 9 @event=Event.new 10 end 11 12 def create 13 @event=Event.create(create_params) 14 unless @event.save 15 render action: :new 16 end 17 end 18 19 def destroy 20 event = Event.find(params[:id]) 21 event.destroy if event.user_id == current_user.id 22 end 23 24 def edit 25 @event = find_event_by_id 26 27 end 28 29 def update 30 @event = Event.find(params[:id]) 31 if @event.user_id == current_user.id 32 @event.update(create_params) 33 end 34 unless @event.save 35 render action: :edit 36 end 37 end 38 39 40 def show 41 @event = find_event_by_id 42 @user = User.find_by(id: @event.user_id) 43 @events = Event.includes(:user).order("created_at DESC ").page(params[:page]).per(10) 44 end 45 46 private 47 def create_params 48 params.require(:event).permit(:image,:name,:place,:text,:scedule,:link,:information_list).merge(user_id: current_user.id) 49 50 end 51 52 def find_event_by_id 53 Event.find(params[:id]) 54 end 55 56 def move_to_index 57 redirect_to action: :index unless user_signed_in? 58 end 59end

app/views/events/_form.html.erb

ruby

1 <%= form_for (@event) do |f| %> 2 <%= render "events/error_message" %> 3 4 <%= f.label "イベント画像" %> 5 <%= f.file_field :image %><br><br> 6 7 <%= f.label "イベント名" %> 8 <%= f.text_field :name, placeholder: 'イベント名'%><br><br> 9 10 <%= f.label "開催地" %> 11 <%= f.text_field :place, placeholder: '開催地'%><br><br> 12 13 14 <%= f.label "イベント詳細" %> 15 <%= f.text_area :text, placeholder: '詳細',style: 'width: 50%; height: 100px'%><br><br> 16 17 <%= f.label "イベントURL" %> 18 <%= f.text_field :link, placeholder: 'リンク先'%><br><br> 19 20 <%= f.label "開催日" %> 21 <%= f.date_field_tag :scedule %><br><br> 22 23 <%= f.label "open" %> 24 <%= f.time_select :scedule, {}, class: 'form-control' %><br><br> 25 26 <%= f.label "start" %> 27 <%= f.time_select :scedule, {}, class: 'form-control' %><br><br> 28 29 <div class="field"> 30 <%= f.label :information_list,"タグ(楽器、開催団体、ジャンルなど)" %> 31 <%= text_field_tag 'event[information_list]',@event.information_list.join(',') %> 32 </div> 33 34 <div class="col10 push1"> 35 <%= button_tag type: "submit", class: "btn btn--block" do %> 36 投稿する<i class="icon-arrow-right"></i> 37 <% end %> 38 </div> 39 <% end %>

app/views/events/show.tml.erb

ruby

1<div class="contents row" > 2 <%= image_tag @event.image.url %> 3 <% @events.each do |event| %> 4 <%= render 'events/tag_list', tag_list: event.information_list %> 5 <% end %> 6 <p> 7 <%= @event.name%><br><br> 8 <%= @event.place%><br><br> 9 <%= @event.text %><br><br> 10 <%= @event.price%><br><br> 11 <%= @event.scedule%><br><br> 12 <%= @event.link %><br><br> 13 </p> 14 15 <div class="user_info">  <%#ユーザー情報表示 %> 16 <%= image_tag @user.image.url %> 17 <h2><%= "#{@user.name}" %></h2> 18 <h3><%= "#{@user.text}" %> </h3> 19 <h3><%= "#{@user.link}" %></h3> 20 </div> 21 22 <% if user_signed_in? && current_user.id == @event.user_id %> 23 <li> 24 <%=link_to '編集', "/events/#{@event.id}/edit", method: :get %> 25 </li> 26 <li> 27 <%= link_to '削除', "/events/#{@event.id}",method: :delete %> 28 </li> 29 <% end %> 30</div>

app/views/events/_tag_list.html.erb

ruby

1<% tag_list.each do |tag| %> 2 <%= tag %> 3<% end %>

DBのtaggingsテーブル
DBのtaggingsテーブルのtaggable_idで
投稿したイベントごとにidが振り分けられていました。
これを利用して、イベント投稿時に入力したタグだけを、イベント詳細ページに表示させることは可能でしょうか?
説明がややこしくなってしまい、申し訳ございません。

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

ruby 2.5.1 Rails 5.2.3

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問