1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SimpleCalendarを用いて、カレンダー内にスケジュールを表示させた

Last updated at Posted at 2018-12-04

#はじめに
  
 Simplecalendarというgemを使用して表示したカレンダー内に、スケジュール情報を表示させる際、苦労しましたので備忘録として残します。

よろしければ参考にしてください。

#SimpleCalendarとは
  viewにコードを記述することにより、カレンダーを表示させる gemです。詳しくは下記URLをご覧ください。

   参考:http://excid3.github.io/simple_calendar/

##カレンダー内に、meetingモデル内のすべてのレコードを表示させる

これは、参考URLのままでうまくいきました。
※Meetingモデルはscaffoldを用いて作成

users.show.html.erb
<%= month_calendar events: @meetings do |date, meetings| %>
  <%= date %>

  <% meetings.each do |meeting| %>
    <div>
      <%= meeting.name %>
    </div>
  <% end %>
<% end %>
users_controller.rb
def show
  @meetings = Meeting.all
end

##meetingモデル内の指定ユーザのレコードを表示
find_byメソッドでは、レコードが1件しか取得できないため、whereメソッドを使用。
※meetingモデルには、useridカラムを追加しました。

users_controller.rb
def show
  @meetings = Meeting.where(userid: params[:id])
end

##上記のレコードに加え、[指定ユーザーと相互フォロー状態にあるユーザー]のレコードを表示
ここで苦労しました。

①インスタンス@meetingsに「指定ユーザー」のスケジュールを代入
②「①で作成したインスタンス@meetings」に対し、「指定ユーザーと相互フォロー状態にあるユーザー」のスケジュールを追加

上記の流れでコーディングを進めましたが、下記の問題が発生しました。
・pushメソッドでデータを追加しようとしたがうまくいかない。

原因は2つありました。
・whereメソッドの戻り値はActiveRecord_Relationのインスタンスなので、Arrayクラスのメソッドであるpushメソッドは使用できない。
   →to_aryメソッドを用いてArrayクラスに変換することにより解決。

・to_aryメソッドにより変換したインスタンスは「freezeプロパティがtrue」となっているため、編集が効かない。
  →dupメソッドを用いて、コピーを作成することにより解決。

users_controller.rb
  def show
    #[表示しているユーザー]のMeetingモデルのレコードを取得
    @meetings = Meeting.where(userid: params[:id]).to_ary().dup()
    
    #[表示しているユーザーと相互フォロー状態にあるユーザー]のMeetingモデルのレコードを追加
    relationships_each(params[:id]).each do |relation|
      tmp = Meeting.where(userid: relation).to_ary

      tmp.each do |record|
        @meetings.push(record)
      end
    end
 
  end

  private

    def relationships_each(userid)
      #[指定されたidのユーザー]と相互フォロー状態にあるユーザーの一覧を配列形式で返す
      relationships_follower = Relationship.where(follower_id: userid).pluck(:followed_id)
      Relationship.where(followed_id: userid).where(follower_id: relationships_follower).pluck(:follower_id)      
    end

参考URL: 
https://qiita.com/7coco/items/b08c842aece4b7f28f55 
https://qiita.com/tsuchinoko_run/items/f3926caaec461cfa1ca3
https://qiita.com/iwamot/items/2ddf8de09d5dbcad2df9

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?