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

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

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

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

Ruby on Rails 6

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

Ruby on Rails

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

Q&A

解決済

1回答

390閲覧

共有済みのカレンダーの表示を変えたい

gomappi

総合スコア7

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/04/02 11:04

前提・実現したいこと

カレンダーを他のユーザーと共有できるアプリケーションを作成しています。
その際あるユーザーのカレンダーを共有する時、一度同じカレンダーを追加したら共有済みのような記述に変更したいのですが上手く条件分岐できません。
どなたかご教授いただけると助かります。(必要であれば他のファイルも追加いたします。)

該当のソースコード

share_calendar.html.erb(共有するカレンダーを追加するページ)

<h1><%= "#{@user.nickname}" + "さんとシェアするカレンダーを選択" %></h1> <% @calendars.each do |calendar| %> <% next unless current_user.id == calendar.user_id %> <%= link_to "#{calendar.calendar_name}のカレンダーを共有", share_calendar_create_calendar_path(calendar.id, user_id: @user.id),method: :post %><br> <% end %> <% @share_calendars.each do |share_calendar| %> <% next unless share_calendar.user_id == @user.id %> <%= share_calendar.calendar.calendar_name + "のカレンダーは共有済みです" %> <% end %>

calendar_controller.rb

class CalendarsController < ApplicationController before_action :authenticate_user!, only: [:new, :create, :show, :destroy] def index @calendars = Calendar.all end def new @calendar = Calendar.new end def create @calendar = Calendar.new(calendar_params) if @calendar.save redirect_to root_path else render :new end end def show @calendar = Calendar.find(params[:id]) @schedules = Schedule.all redirect_to root_path unless @calendar.user_id == current_user.id end def destroy @calendar = Calendar.destroy(params[:id]) end def share_user if params[:email].present? @user = User.where(email: "#{params[:email]}") else @user = User.none end end def share_calendar @user = User.find(params[:id]) @calendars = Calendar.all @share_calendars = ShareCalendar.all end def share_calendar_create @calendar = Calendar.find(params[:id]) @user = User.find(params[:user_id]) @share_calendar = ShareCalendar.new(calendar_id: params[:id],user_id: @user.id) if @share_calendar.save else redirect_to root_path end end private def calendar_params params.require(:calendar).permit(:calendar_name).merge(user_id: current_user.id) end def share_calendar_params params.permit(user_id: @user_id,calendar_id: @calendar_id) end end

routes.rb

Rails.application.routes.draw do devise_for :users root to: "calendars#index" resources :calendars ,only: [:index, :new, :create, :show, :destroy] do resources :schedules , only: [:new, :create, :edit, :show, :update, :destroy] collection do get 'share_user' end member do get 'share_calendar' post 'share_calendar_create' end end end

試したこと

zipメソッドを使ってshare_calendarアクションのインスタンス変数(@calendarsと@share_calendars)を取得しようと試みましたが、上手く取得できませんでした。

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

Rails 6.0.3.5
ruby 2.6.5

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

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

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

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

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

guest

回答1

0

ベストアンサー

User has_many :share_calendars だとして、
コントローラーで @user の シェアしたカレンダーの id を変数に入れておきます

ruby

1# カレンダーの id が入ります 2@shared_calendar_ids = @user.share_calendars.pluck(:calendar_id)

view で calendar の id が @shared_calendar_ids に含まれていないか調べます

ruby

1@calendars.each do |calendar| 2 if @shared_calendar_ids.include?(calendar.id) 3 # シェアされたカレンダー 4 else 5 # シェアされてないカレンダー 6 end 7end

投稿2021/04/04 06:57

neko_daisuki

総合スコア2090

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

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

gomappi

2021/04/04 07:37

連絡ありがとうございます。pluckメソッドというものは便利そうですね! こちらの問題は実装方法を変えて対応したので解決済みとして対応させていただきます。 お手数いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問