外部キーが保存できない
解決したいこと
Ruby on RailsでWebアプリをつくっています。
タグを追加する機能の実装中にエラーが発生しました。
解決方法を教えて下さい。
発生している問題・エラー
eventテーブルとtagテーブルは入れ子構造の関係で、tagテーブルに外部キーevent_idを保存したいのですが保存できません。
エラーメッセージ
ActiveRecord::RecordInvalid in TagsController#create
Validation failed: Event must exist
ruby '2.6.5'
'rails', '~> 6.0.0'
tags_controller.rb
class TagsController < ApplicationController
def index
@tags = Tag.all
end
def new
@tag = Tag.new
end
def create
if Tag.create(tag_params)
redirect_to tags_path
else
render :new
end
end
private
def tag_params
params.require(:tag).permit(:tag_name).merge(event_id: params[:event_id])
end
end
tag.rb
class Tag < ApplicationRecord
validates :tag_name, presence: true
belongs_to :event
end
event.rb
class Event < ApplicationRecord
validates :event_name, presence: true
belongs_to :user
has_many :tags
end
routes.rb
Rails.application.routes.draw do
devise_for :users
root to: 'events#index'
resources :users, only: :show
resources :tags, only: [:index, :new, :create, :edit, :destroy]
resources :events do
resources :tags, only: [:index, :new, :create, :edit, :destroy]
end
end
event_controller
class EventsController < ApplicationController
before_action :move_to_index, except: [:index]
def index
@events = Event.includes(:user)
end
def new
@event = Event.new
end
def create
if Event.create(event_params)
redirect_to events_path
else
render :new
end
end
def destroy
event = Event.find(params[:id])
event.destroy
end
private
def event_params
params.require(:event).permit(:event_name).merge(user_id: current_user.id)
end
def move_to_index
unless user_signed_in?
redirect_to action: :index
end
end
end
自分で試したこと
外部キーの保存といいうことで、モデルに関連づけをして入れ子構造の再確認をしました。paramsのevent_idがnillのままで変化はありませんでした。。。
わかる方いましたらご教示お願いいたします🙇♀️
0