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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

493閲覧

Rails アソシエーション エラー

mikan0777

総合スコア10

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/03/04 06:49

前提・実現したいこと

<エラーが出るまでの背景>

〇event-group(多対1の関係)
とモデルを定義し、モデルファイルでアソシエーションを組み、
『eventが属するgroupとグループページのgroupが一致すれば、eventを削除できる』
(わかりづらかったらすみません)
という仕様にしたいのですがevent.group_idとしてもnillになってしまい、思うように動きません...。

<開発環境>
awsのcloud9でrubyonrailsを利用してweleveという名前のwebアプリケーションを開発しています。DBはMySQLを利用しています

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

destroyメソッド内にbinding.pryとしてブレークポイントを設定したのちにviewで削除ボタンを押した時のターミナル

19: def destroy 20: # binding.pry 21: @group=Group.find(params[:group_id]) 22: event=Event.find(params[:id]) => 23: binding.pry 24: event.destroy if event.group_id==@group.id 25: redirect_to controller: 'groups', action: 'show' 26: end [1] pry(#<EventsController>)> @group => #<Group:0x0000000006698bc8 id: 2, name: "あああ", category: "サークル", what_to_do: "テニス", intro: "パリピ", created_at: nil, updated_at: nil> [2] pry(#<EventsController>)> @group.id => 2 [3] pry(#<EventsController>)> event => #<Event:0x000000000669d150 id: 2, title: "食事会", date: Fri, 03 Apr 2020, descrip: "タダでご飯食べれるよ", where: "おしゃんなご飯屋さん", created_at: nil, updated_at: nil, group_id: 2> [4] pry(#<EventsController>)> event.group_id => nil ↑ここがnilになる理由がわからないです... ### 該当のソースコード ```グループページ <div class="event_index"> <%= @events.each do |event| %> <!--<div class="background_image" style="background-image: url('images.jpg')">--> <h3><%= event.title %></h3> <ul> <li> <p>日時:<%= event.date %></p> </li> <li> <p>集合場所:<%= event.where %></p> </li> </ul> <%= simple_format (event.descrip) %> <% if event.group==@group %> <%= link_to "編集", edit_group_event_path(@group,event), method: :get %> <%= link_to "削除", "/groups/#{@group.id}/events/#{event.id}", method: :delete %> <% end %> <% end %> </div>

eventsコントローラのdestroyメソッド

1 def destroy 2 # binding.pry 3 @group=Group.find(params[:group_id]) 4 event=Event.find(params[:id]) 5 binding.pry 6 event.destroy if event.group==@group 7 redirect_to controller: 'groups', action: 'show' 8 end

event.rb

1class Event < ApplicationRecord 2 attr_accessor :group_id 3 has_many :applies 4 has_many :students, through: :applies 5 6 belongs_to :group 7 8end

group.rb

1class Group < ApplicationRecord 2 has_many :events 3 has_many :students 4end

group.rb

1class Group < ApplicationRecord 2 has_many :events 3 has_many :students 4end 5 6```eventsテーブルにgroup_idを外部キー制約付きで作成するためのマイグレーションファイル 7class AddGroupIdToEvents < ActiveRecord::Migration[5.2] 8 def change 9 add_reference :events, :group, foreign_key: true 10 end 11end 12 13```route.rb(関係あるかわかりませんが...) 14Rails.application.routes.draw do 15 devise_for :students 16 17 root to: 'events#index' 18 19 # resources :events 20 21 resources :students,only:[:show,:edit,:update] 22 resources :groups, only:[:show,:edit, :update] do 23 resources :events, only:[:edit, :update, :destroy] 24 end 25 26end

試したこと

〇アソシエーションの組み方が間違っていないか確認

〇eventsテーブルもgroup_idに外部キー制約をつけてみる

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

マイグレーションは組めているはずなのになぜevent.group_idとするのnillになるのかさっぱりわかりません...
ド素人なのでどなたかご教授していただくと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Event クラスに書いている以下の行が原因です。

rb

1 attr_accessor :group_id

上記の行を削除すれば問題なく動くと思います。

--

■ 解説

データベースに group_id というカラムがあれば、Rails が自動的に group_id という名前のメソッドを作ってくれます。

しかし、今回は同じ名前で attr_accessor を定義しちゃってるので、メソッドが上書きされてしまい、本来とは異なる動作になっちゃってます。

投稿2020/03/04 11:15

shinoharat

総合スコア1676

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

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

mikan0777

2020/03/04 14:35

attr_accessor :group_id を削除するとうまくいきました。わかりやすい解説有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問