🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

2710閲覧

ページのカレンダー毎に紐付いた予定だけを表示させるようにしたい

eita-eng

総合スコア3

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/03/16 01:43

編集2021/03/16 02:36

前提・実現したいこと

Railsでページごとにカレンダー表を実装した日程表のシステムを作っています。(Simple Calendarのgemを用いています。)
カレンダー毎に紐付いた予定を追加する機能を実装したいのですが、予定を追加した所全てのカレンダーに予定が反映されてしまいます。

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

例;予定を追加で、「テスト」というtitle名で追加した時、別ページのカレンダーにも「テスト」と表示される。

該当のソースコード

↓_main_event.html.erb(index.html.erbから呼び出している。)

Ruby

1<div class="event-header"> 2 <div class=event-name>hogefuga</div> 3 <div class="event-destroy"> 4 <%= link_to 'チャットを終了する', '#' %> 5 </div> 6</div> 7 8<div class="event-main"> 9 <div class="plan-create"> 10 <%= link_to '予定を追加', new_department_event_path %> 11 </div> 12 <div class="calendar"> 13 <%# カレンダ表 %> 14 <%= month_calendar events: @events do |date, events| %> 15 <%= date.day %> 16 <%# カレンダー予定追加 %> 17 <% events.each do |event| %> 18 <div class="create-title"> 19 <%= event.title %> 20 </div> 21 <% end %> 22 <%#/ カレンダー予定追加 %> 23 <% end %> 24 <%#/ カレンダー表 %> 25 </div> 26 <div class="comment"> 27 <div class="comment-user"> 28 <div class="comment-user-name"> 29 Tom 30 </div> 31 <div class="current-time"> 32 2020/3/31(Wed) 12:43:30 33 </div> 34 </div> 35 <div class="comment-content"> 36 おはよう 37 </div> 38 </div> 39 <div class="comment"> 40 <div class="comment-user"> 41 <div class="comment-user-name"> 42 Tom 43 </div> 44 <div class="current-time"> 45 2020/3/31(Wed) 18:43:30 46 </div> 47 </div> 48 <div class="comment-content"> 49 こんばんわ 50 </div> 51 </div> 52</div> 53 54<div class="form"> 55 <div class="form-comment"> 56 <input type="text" placeholder="type a message" class="form-input" > 57 <label class="form-image"> 58 <span class="image-file">画像</span> 59 <input type="file" class="hidden"> 60 </label> 61 </div> 62 <input type="submit" value="送信" class="form-submit"> 63</div>

↓EventsController

Ruby

1class EventsController < ApplicationController 2 3 def index 4 @departments = Department.all 5 @events = Event.all 6 end 7 8 def new 9 @events = current_user.events 10 @department = Department.find(params[:department_id]) 11 end 12 13 def create 14 @department = Department.find(params[:department_id]) 15 @events = @department.events.new(event_params) 16 if @events.save 17 redirect_to department_events_path(@department.id) 18 else 19 redirect_to new_department_event_path 20 end 21 end 22 23 private 24 25 def event_params 26 params.require(:event).permit(:title, :content, :start_time, department_ids: []).merge(user_id: current_user.id) 27 end 28 29end 30

↓department_eventモデル

Ruby

1class DepartmentEvent < ApplicationRecord 2 belongs_to :event 3 belongs_to :department 4end

↓departmentモデル

Ruby

1class Department < ApplicationRecord 2 has_many :department_events 3 has_many :events, through: :department_events 4 validates :name, presence: true 5end

↓eventモデル

Ruby

1class Event < ApplicationRecord 2 belongs_to :user 3 has_many :department_events 4 has_many :departments, through: :department_events 5end 6

試したこと

現在EventsController・indexアクションにて、下記の様に記述しておりますが、これだと「全てのイベント情報」の値を変数に渡しているのでこれを「このページに紐付いたイベント情報のみ」の値を渡すように記述したいのですが試行錯誤致しましたが解決に至りませんでした。

Ruby

1@events = Event.all

補足情報

↓index.html.erb

Ruby

1<div class="wrapper"> 2 <div class="side-bar"> 3 <%= render "side_bar" %> 4 </div> 5 <div class="event"> 6 <%= render "main_event" %> 7 </div> 8</div>

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

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

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

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

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

neko_daisuki

2021/03/16 02:23

index.html.erb では、@deparetments.each do の中で _main_event.html.erb を呼び出しているのでしょうか?
eita-eng

2021/03/16 02:31

いいえ! そのまま呼び出しております。 @deparetmentsはページの表示名を表す際に使用しております。
guest

回答1

0

ベストアンサー

routes.rb が次のような感じになってるとすると

ruby

1resources :departments do 2 resources :events 3end

以下のようにすればそのページ(params[:department_id])に関連するイベントに絞り込めると思います。

ruby

1def index 2 @departments = Department.all # 表示名を表す用 3 @events = Department.find(params[:department_id]).events 4end

投稿2021/03/16 02:40

neko_daisuki

総合スコア2090

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

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

eita-eng

2021/03/16 02:52

回答頂き有難うございます!!無事実装出来ました! 今回のご指摘大変勉強になりました。@events内の値を近しい所まで記述できたのですが、「.events」を最後つけておりませんでした。今回のエラー内容を糧に実装を続けてまいります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問