###解決したいこと
メッセージを投稿したいのですが、エラーは出ずにelseの方が読み込まれてしまい、ifの方に読み込まれないです。
group,calendar,messageとゆう順番にrouteはネストされています。
calendarのindexでの下のeach文で@calendarsに@groupの値を入れないと表示がされなく、そのため、messagecontrollerで@calendars = @groupとしているのですが、これのせいでcreateでの@messageのあとの@calendarが@groupのidになっているのでしょうか?
私なりにいろいろ試してみたのですがelseの方が読み込まれるか、エラーが出てNo methodとでるので全然解決しないのでよければ教えていただきたいです!
###Messagescontroller
class MessagesController < ApplicationController before_action :set_group before_action :set_calendar def index @message = Message.new @messages = @calendar.messages.includes(:user) @calendars = @group end def create @calendars = @group @message = @calendar.messages.new(message_params) if @message.save redirect_to group_calendar_messages_path(@calendar, @calendar) else @messages = @calendar.messages.includes(:user) flash.now[:alert] = 'メッセージを入力してください。' render :index end end private def message_params params.require(:message).permit(:content, :image).merge(user_id: current_user.id) end def set_group @group = Group.find(params[:group_id]) end def set_calendar @calendar = Calendar.find(params[:calendar_id]) end end
messageのリンクにとぶためのcalendar#index
.wrapper .hoom .center .center__top %h2.center__top__name = current_user.name .center__naka %h5.center__naka__date Schedule .center__naka__new = link_to new_group_calendar_path do = icon('fas', 'calendar-plus', class:'new') .center__bottom - @calendars.calendars.each do |calendar| .center__bottom__list = link_to group_calendar_messages_path(calendar.group, calendar), class:"a" do .center__bottom__list__name = calendar.date
###message#index
.hoom .light .main .main__footer = form_with model: [@group, @calendar, @message], html: {class: "form"}, local: true do |f| .input-box = f.text_field :content, class: 'input-box__text', placeholder: 'message' = f.label :image, class: 'input-box__image' do = icon('fas', 'camera', class: 'input-box__icon') = f.file_field :image, class: 'input-box__image__file' = f.submit 'Go', class: 'submit__btn' .main__header %h4.main__header__group = @group.name .main__header__edit = link_to edit_group_path(@group) do = icon('fas', 'cog', class:'edit') .main__calendar .main__calendar__content = render @messages
###message#indexのrenderの先のリンク
.box .box__username = message.user.name .box__message - if message.content.present? %p.box__message__content = message.content = image_tag message.image.url, class: 'box__message__image' if message.image.present?
###message#model
class Message < ApplicationRecord belongs_to :user belongs_to :group belongs_to :calendar validates :content, presence: true, unless: :image? mount_uploader :image, ImageUploader end
###message#migrate
class CreateMessages < ActiveRecord::Migration[6.0] def change create_table :messages, id: :integer do |t| t.string :content t.string :image t.integer :group_id, foreign_key: true t.integer :calendar_id, foreign_key: true t.integer :user_id, foreign_key: true t.timestamps end end end
###group#model
class Group < ApplicationRecord has_many :group_users has_many :users, through: :group_users has_many :calendars has_many :messages validates :name, presence: true, uniqueness: true end
###group_user#model
class GroupUser < ApplicationRecord belongs_to :group belongs_to :user end
###calendar#model
class Calendar < ApplicationRecord belongs_to :user belongs_to :group has_many :messages validates :date, presence: true end
###user#model
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :group_users has_many :groups, through: :group_users has_many :messages has_many :calendars end
###group#migate
class CreateGroups < ActiveRecord::Migration[6.0] def change create_table :groups do |t| t.string :name, null: false t.index :name, unique: true t.timestamps end end end
###user#migrate
class DeviseCreateUsers < ActiveRecord::Migration[6.0] def change create_table :users do |t| ## Database authenticatable t.string :name, null: false t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable # t.integer :sign_in_count, default: 0, null: false # t.datetime :current_sign_in_at # t.datetime :last_sign_in_at # t.string :current_sign_in_ip # t.string :last_sign_in_ip ## Confirmable # t.string :confirmation_token # t.datetime :confirmed_at # t.datetime :confirmation_sent_at # t.string :unconfirmed_email # Only if using reconfirmable ## Lockable # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts # t.string :unlock_token # Only if unlock strategy is :email or :both # t.datetime :locked_at t.timestamps null: false end add_index :users, :name, unique: true add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true # add_index :users, :confirmation_token, unique: true # add_index :users, :unlock_token, unique: true end end
###calendar#migrate
class CreateCalendars < ActiveRecord::Migration[6.0] def change create_table :calendars do |t| t.string :date t.references :group, foreign_key: true t.references :user, foreign_key: true t.timestamps end end end
###補足
何かお気付きの箇所などありましたらご助言いただけると助かります。他のデータも必要でしたら載せますのでおっしゃってください。
お願いいたします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/18 03:10
2020/07/18 10:00
2020/07/18 12:06
2020/07/18 12:36
2020/07/18 12:52
2020/07/30 09:28
2020/07/30 11:55
2020/07/31 03:41
2020/08/13 01:54