前提・実現したいこと
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テーブルのtaggable_idで
投稿したイベントごとにidが振り分けられていました。
これを利用して、イベント投稿時に入力したタグだけを、イベント詳細ページに表示させることは可能でしょうか?
説明がややこしくなってしまい、申し訳ございません。
補足情報(FW/ツールのバージョンなど)
ruby 2.5.1 Rails 5.2.3
あなたの回答
tips
プレビュー