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

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

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

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

MySQL

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

解決済

物理削除を使った退会機能でDMが削除できない

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

MySQL

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

1回答

1グッド

0クリップ

527閲覧

投稿2022/10/12 14:00

編集2022/10/19 12:44

概要

1.物理削除式の退会機能を付けようとしています。

2.エラーが発生し、エラーの内容はroom.user_idというカラムはありませんと表示されています。

3.全roomテーブルの中で退会しようとしているユーザーのIDが入っているroomも削除するためEntryテーブルから
@currentUserEntry=Entry.where(user_id: current_user.id)
と記述しuser_idを取得しようとしました。

4.ルームの中にあるuser_idはEntryからとってくると思っているのだが正しいかは不明
!追記
関連定義を見直し、退会を行おうとしたところエラーが発生しました。

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

ActiveRecord::HasManyThroughOrderError at /users/3/withdrawal Cannot have a has_many :through association 'User#rooms' which goes through 'User#entries' before the through association is defined.
def withdrawal @user = User.find(params[:id]) @user.destroy     ←エラー箇所 flash[:notice] = 'ユーザーを削除しました。' redirect_to '/' end

該当のソースコード

恐らく関連している箇所はuserのコントローラとモデルの2つです。

users_controller.rb/withdrawalアクション

1def withdrawal 2 @user = User.find(params[:id]) 3 @user.destroy 4 flash[:notice] = 'ユーザーを削除しました。' 5 redirect_to '/' 6 end

user.rbのhas_many箇所

1has_many :plans, :dependent => :destroy 2 has_many :relationships, :dependent => :destroy 3 has_many :followings, through: :relationships, source: :follow, :dependent => :destroy 4 has_many :reverses_of_relationship, class_name: 'Relationship', foreign_key: 'follow_id', :dependent => :destroy 5 has_many :followers, through: :reverses_of_relationship, source: :user, :dependent => :destroy 6 has_many :favorites, :dependent => :destroy 7 has_many :favorite_plans, through: :favorites, source: :plan, :dependent => :destroy 8 has_many :rooms, through: :entries 9 has_many :rooms, through: :entries, :dependent => :destroy 10 has_many :entries, :dependent => :destroy 11 has_many :messages, :dependent => :destroy

!追記

schema/roomsandUsers

1create_table "rooms", charset: "utf8mb4", force: :cascade do |t| 2 t.string "room_name" 3 t.datetime "created_at", precision: 6, null: false 4 t.datetime "updated_at", precision: 6, null: false 5 t.bigint "plan_id", null: false 6 t.index ["plan_id"], name: "index_rooms_on_plan_id" 7 end 8 9create_table "users", charset: "utf8mb4", force: :cascade do |t| 10 t.string "email", default: "", null: false 11 t.string "encrypted_password", default: "", null: false 12 t.string "name", null: false 13 t.string "furiganaName", null: false 14 t.string "password_digest", default: "", null: false 15 t.string "telephone_number", null: false 16 t.string "post_code", null: false 17 t.string "address", null: false 18 t.string "self_introduction" 19 t.string "image" 20 t.string "reset_password_token" 21 t.datetime "reset_password_sent_at" 22 t.datetime "remember_created_at" 23 t.datetime "created_at", precision: 6, null: false 24 t.datetime "updated_at", precision: 6, null: false 25 t.boolean "is_deleted", default: true, null: false 26 t.index ["email"], name: "index_users_on_email", unique: true 27 t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true 28 end

room.rb

1class Room < ApplicationRecord 2 has_many :entries, dependent: :destroy 3 has_many :messages, dependent: :destroy 4 belongs_to :plan 5 has_many :users, through: :entries 6 has_many :users, through: :entries, :dependent => :destroy 7end 8

箇条書きで簡潔に書こうと試みてみたのですが、うまく伝わっていませんでしたらすみません。

!追記
・物理削除
退会処理が行われるとユーザーはアカウントを使用できなくなります。
そして、データ自体も記憶媒体(データベース)から削除されます。

・論理削除
退会処理が行われるとユーザーはアカウントを使用できなくなります。
ただし、データ自体は記憶媒体(データベース)には存在します。

!追記 コードの追記

_room.html.erb

1<div class = 'dm-list'> 2 <% @rooms.zip(@anotherEntries) do |room,entry| %> 3 <div style='width: 200px; border:solid 1px gray'> 4 <p><%= link_to entry.user.name, user_path(entry.user), class: "text-decoration-none" %></p> 5 <p><%= link_to room.room_name, plan_path(room.plan_id), class: "text-decoration-none" %></p> 6 <p><%= link_to 'メッセージ', room, class: "btn btn-primary btn-lg" %></p> 7 </div><br /> 8 <% end %> 9 <div class="d-flex justify-content-left mb-2"> 10 <%== pagy_bootstrap_nav(@pagy) %> 11 </div> 12</div> 13
takezoux2👍を押しています

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

y_waiwai

2022/10/12 14:26

物理削除とはなんのことでしょか。
退会済みユーザー

退会済みユーザー

2022/10/12 14:30

・物理削除 退会処理が行われるとユーザーはアカウントを使用できなくなります。 そして、データ自体も記憶媒体(データベース)から削除されます。 ・論理削除 退会処理が行われるとユーザーはアカウントを使用できなくなります。 ただし、データ自体は記憶媒体(データベース)には存在します。 参考サイト https://qiita.com/__Wata16__/items/9e05596afb671e540365
y_waiwai

2022/10/12 14:37

その説明も質問文に追記しといた方がいいかと
退会済みユーザー

退会済みユーザー

2022/10/12 14:41 編集

すみません。 更新しました。
winterboum

2022/10/13 07:02

エラーメッセージ はそれだけですか?省略しないでください
退会済みユーザー

退会済みユーザー

2022/10/13 08:25

すみません。 今、エラーを再度確認しようとしたら、No route matches [GET] "/users/2/withdrawal" と出ました。コードも変えていないのに発生しているので、少しわからないのでお待ちください。
退会済みユーザー

退会済みユーザー

2022/10/13 08:34

更新しました。
winterboum

2022/10/13 08:38

画像でなく、log にもっと情報でてません?
winterboum

2022/10/13 08:40

Room のスキーマ載せてください
退会済みユーザー

退会済みユーザー

2022/10/13 08:46

Roomsのスキーマ等を更新しました。

回答1

0

ベストアンサー

schema/rooms 見ると エラーメッセージの通り、user_id がないですね。

Rommにuser_id がなければ user が has_many rooms にならないと思うのだが、、、、
動いてた???

投稿2022/10/13 09:44

winterboum

総合スコア22593

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

退会済みユーザー

退会済みユーザー

2022/10/13 11:26 編集

えーっと、、、 roomsは問題なく、動いていると思っていたのですが、 すみません。 直ちに調べてみます!
退会済みユーザー

退会済みユーザー

2022/10/13 11:52 編集

has_many :roomsから:dependent => :destroyを外して退会機能を試してみたところ、roomを残して 退会してしまいました。 またrails cでRoomを一回削除しようとしたのですけど、user_idが読み取れないということで、消せなくなってしまいました。 !追記 どうしてもわからなかったのでデータベースを一度リセットしました。
退会済みユーザー

退会済みユーザー

2022/10/13 12:32

ユーザーを消すとDM一覧でuserのIDが得られずにエラーが発生するのですが、roomごと消すにはどうすればいいでしょうか?
winterboum

2022/10/13 12:54

User のスキーマは? それと、関連定義はいまどうなってます?
退会済みユーザー

退会済みユーザー

2022/10/13 14:10

User のスキーマを載せました。 関連定義は質問に書いてある通りに戻しました。
winterboum

2022/10/13 14:21

モデル Roomの関連定義が無いけど
退会済みユーザー

退会済みユーザー

2022/10/13 14:39

roomモデルを書き込みました。
winterboum

2022/10/13 23:15

関連定義がおかしいです。 RoomとUserが多対多になっているのに、中間tableがありません。 これで動いていた? この状態で Roomを削除するとしたら、Room. User 双方の関連定義を一旦削除、ですね。 dependent: :destroy 削除でも行けるかな。
退会済みユーザー

退会済みユーザー

2022/10/14 02:10

一旦Room,User、双方の関連定義を削除して、退会を試みたところ昨日と同様に退会はできたのですが、 Roomが残り、userがnilになり、DM一覧でエラーが起こってしまいました。 エラー NoMethodError at /rooms undefined method `user' for nil:NilClass Hint: Something is `nil` when it probably shouldn't be.
winterboum

2022/10/14 03:47

エラーメッセージ は編集しないでください
退会済みユーザー

退会済みユーザー

2022/10/14 04:05 編集

こちらでしょうか? NoMethodError at /rooms undefined method `user' for nil:NilClass Hint: Something is `nil` when it probably shouldn't be. Instance Variables @_routes nil @_config #< {}> @lookup_context #<ActionView::LookupContext:0x00005574d01417f8 @details_key=#<Object:0x00005574d139b6d8>, @digest_cache=nil, @cache=true, @prefixes=["rooms", "application"], @details={:locale=>[:ja], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}, @view_paths=#<ActionView::PathSet:0x00005574d0140cb8 @paths=[#<ActionView::OptimizedFileSystemResolver:0x00005574d01a14f0 @pattern=":prefix/:action{.:locale,}{.:formats,}{+:variants,}{.:handlers,}", @unbound_templates=#<Concurrent::Map:0x00005574d01a1450 entries=14 default_proc=nil>, @path_parser=#<ActionView::Resolver::PathParser:0x00005574d1298d30 @regex=/ \A (?:(?<prefix>.*)\/)? (?<partial>_)? (?<action>.*?) (?:\.(?<locale>[a-z]{2}(?:-[A-Z]{2})?))?? (?:\.(?<format>html|text|js|css|ics|csv|vcf|vtt|png|jpeg|gif|bmp|tiff|svg|mpeg|mp3|ogg|m4a|webm|mp4|otf|ttf|woff|woff2|xml|rss|atom|yaml|multipart_form|url_encoded_form|json|pdf|zip|gzip))?? (?:\+(?<variant>[^.]*))?? (?:\.(?<handler>raw|erb|html|builder|ruby|jbuilder))? \z /x>, @cache=#<ActionView::Resolver::Cache:0x00005574d01a1360 keys=2 queries=0>, @path="/home/ubuntu/environment/tsunageru/app/views">, #<ActionView::OptimizedFileSystemResolver:0x00005574d01a2850 @pattern=":prefix/:action{.:locale,}{.:formats,}{+:variants,}{.:handlers,}", @unbound_templates=#<Concurrent::Map:0x00005574d01a2800 entries=3 default_proc=nil>, @path_parser=#<ActionView::Resolver::PathParser:0x00005574d1298ce0 @regex=/ \A (?:(?<prefix>.*)\/)? (?<partial>_)? (?<action>.*?) (?:\.(?<locale>[a-z]{2}(?:-[A-Z]{2})?))?? (?:\.(?<format>html|text|js|css|ics|csv|vcf|vtt|png|jpeg|gif|bmp|tiff|svg|mpeg|mp3|ogg|m4a|webm|mp4|otf|ttf|woff|woff2|xml|rss|atom|yaml|multipart_form|url_encoded_form|json|pdf|zip|gzip))?? (?:\+(?<variant>[^.]*))?? (?:\.(?<handler>raw|erb|html|builder|ruby|jbuilder))? \z /x>, @cache=#<ActionView::Resolver::Cache:0x00005574d01a2620 keys=2 queries=0>, @path="/home/ubuntu/.rvm/gems/ruby-3.0.0/gems/devise-i18n-1.10.2/app/views">, #<ActionView::OptimizedFileSystemResolver:0x00005574d01a3ea8 @pattern=":prefix/:action{.:locale,}{.:formats,}{+:variants,}{.:handlers,}", @unbound_templates=#<Concurrent::Map:0x00005574d01a3e08 entries=0 default_proc=nil>, @path_parser=#<ActionView::Resolver::PathParser:0x00005574d1298c40>, @cache=#<ActionView::Resolver::Cache:0x00005574d01a3c78 keys=1 queries=0>, @path="/home/ubuntu/.rvm/gems/ruby-3.0.0/gems/devise-4.8.1/app/views">]>> @view_renderer #<ActionView::Renderer:0x00005574d01f3610 @lookup_context=#<ActionView::LookupContext:0x00005574d01417f8 @details_key=#<Object:0x00005574d139b6d8>, @digest_cache=nil, @cache=true, @prefixes=["rooms", "application"], @details={:locale=>[:ja], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}, @view_paths=#<ActionView::PathSet:0x00005574d0140cb8 @paths=[#<ActionView::OptimizedFileSystemResolver:0x00005574d01a14f0 @pattern=":prefix/:action{.:locale,}{.:formats,}{+:variants,}{.:handlers,}", @unbound_templates=#<Concurrent::Map:0x00005574d01a1450 entries=14 default_proc=nil>, @path_parser=#<ActionView::Resolver::PathParser:0x00005574d1298d30 @regex=/ \A (?:(?<prefix>.*)\/)? (?<partial>_)? (?<action>.*?) (?:\.(?<locale>[a-z]{2}(?:-[A-Z]{2})?))?? (?:\.(?<format>html|text|js|css|ics|csv|vcf|vtt|png|jpeg|gif|bmp|tiff|svg|mpeg|mp3|ogg|m4a|webm|mp4|otf|ttf|woff|woff2|xml|rss|atom|yaml|multipart_form|url_encoded_form|json|pdf|zip|gzip))?? (?:\+(?<variant>[^.]*))?? (?:\.(?<handler>raw|erb|html|builder|ruby|jbuilder))? \z /x>, @cache=#<ActionView::Resolver::Cache:0x00005574d01a1360 keys=2 queries=0>, @path="/home/ubuntu/environment/tsunageru/app/views">, #<ActionView::OptimizedFileSystemResolver:0x00005574d01a2850 @pattern=":prefix/:action{.:locale,}{.:formats,}{+:variants,}{.:handlers,}", @unbound_templates=#<Concurrent::Map:0x00005574d01a2800 entries=3 default_proc=nil>, @path_parser=#<ActionView::Resolver::PathParser:0x00005574d1298ce0 @regex=/ \A (?:(?<prefix>.*)\/)? (?<partial>_)? (?<action>.*?) (?:\.(?<locale>[a-z]{2}(?:-[A-Z]{2})?))?? (?:\.(?<format>html|text|js|css|ics|csv|vcf|vtt|png|jpeg|gif|bmp|tiff|svg|mpeg|mp3|ogg|m4a|webm|mp4|otf|ttf|woff|woff2|xml|rss|atom|yaml|multipart_form|url_encoded_form|json|pdf|zip|gzip))?? (?:\+(?<variant>[^.]*))?? (?:\.(?<handler>raw|erb|html|builder|ruby|jbuilder))? \z /x>, @cache=#<ActionView::Resolver::Cache:0x00005574d01a2620 keys=2 queries=0>, @path="/home/ubuntu/.rvm/gems/ruby-3.0.0/gems/devise-i18n-1.10.2/app/views">, #<ActionView::OptimizedFileSystemResolver:0x00005574d01a3ea8 @pattern=":prefix/:action{.:locale,}{.:formats,}{+:variants,}{.:handlers,}", @unbound_templates=#<Concurrent::Map:0x00005574d01a3e08 entries=0 default_proc=nil>, @path_parser=#<ActionView::Resolver::PathParser:0x00005574d1298c40>, @cache=#<ActionView::Resolver::Cache:0x00005574d01a3c78 keys=1 queries=0>, @path="/home/ubuntu/.rvm/gems/ruby-3.0.0/gems/devise-4.8.1/app/views">]>>> @current_template nil @rendered_format nil @marked_for_same_origin_verification true @current_user (exception ArgumentError was raised in inspect) @_assigns (exception ArgumentError was raised in inspect) @_controller #<RoomsController:0x00000000021a20> @_request (Instance of ignored class. Remove ActionDispatch::Request from BetterErrors.ignored_classes if you need to see it.) @_default_form_builder nil @view_flow #<ActionView::OutputFlow:0x00005574d01f2ee0 @content={}> @output_buffer nil @virtual_path nil @pagy #<Pagy:0x00005574d0b3c2a8 @vars={:page=>1, :items=>10, :outset=>0, :size=>[1, 4, 4, 1], :page_param=>:page, :params=>{}, :fragment=>"", :link_extra=>"", :i18n_key=>"pagy.item_name", :cycle=>false, :steps=>false, :count=>1}, @count=1, @page=1, @outset=0, @items=10, @last=1, @pages=1, @offset=0, @params={}, @from=1, @to=1, @in=1, @prev=nil, @next=nil> @rooms #<ActiveRecord::Relation [#<Room id: 1, room_name: "テスト", plan_id: 1>]> @currentEntries #<ActiveRecord::Associations::CollectionProxy [#<Entry id: 2, user_id: 1, room_id: 1>]> @anotherEntries #<ActiveRecord::Relation []>
winterboum

2022/10/14 04:20

どのfileの何行目で、という情報はない? log見てみて
退会済みユーザー

退会済みユーザー

2022/10/14 07:37 編集

app/views/rooms/_room.html.erbファイルの 5行目の <p><%= link_to entry.user.name, user_path(entry.user), class: "text-decoration-none" %></p> がエラー箇所だと表示しています。 今、そこのコードを質問に追加します。 !追記 質問にエラー箇所を載せました。
winterboum

2022/10/14 09:29

@rooms と @anotherEntries の数が違うんじゃないの?
退会済みユーザー

退会済みユーザー

2022/10/14 10:47 編集

roomを残して退会(user削除)が実行されているので、@anotherEntriesの数が足りないのはかなと考えたのですが、 ちなみにroomは削除できていませんでした。 どうでしょうか?
winterboum

2022/10/14 11:58

「roomを残して退会(user削除)が実行されているので、@anotherEntriesの数が足りない」からそのエラーとなってます。 Room どうやって削除したの?
退会済みユーザー

退会済みユーザー

2022/10/14 12:22 編集

Roomは削除できていません。 Roomはもう削除できないものとして考えたほうがいいのでしょうか?
winterboum

2022/10/14 12:37

ですから、削除しようとした時にどうやりましたか
退会済みユーザー

退会済みユーザー

2022/10/14 12:48

えーっと、、、 roomとuser関連定義を消した後に退会を実行しました。 ですのでRoomを消す記述はしていないかもしれません。。。 すみません。 users_controllerのwithdrawalアクションからroomに入れ分けるEntryテーブルからuserのidを取り出そうとはしました。 ですがその後の記述がないのでroomをほったらかして削除をしていたかもしれません。 先述のアクションでroomのレコードを持ってきて、そこからEntryから特定してroomをdestroyするという流れを考えていたのですが、roomのレコードを持ってくることは可能でしょうか?
winterboum

2022/10/14 13:12

とりあえず消したいなら、rails console ではだめですか?
退会済みユーザー

退会済みユーザー

2022/10/14 13:15

rails consoleで消そうとしたのですが、同じエラーが表示されて消せなかったので、データベースをとりあえず1度リセットしちゃいました。
退会済みユーザー

退会済みユーザー

2022/10/17 08:06

users_controllerの退会機能(withdrawalアクション)にroomの削除箇所も追加しようと考えているのですが、、 roomとuserを両方destroyで消すことは可能でしょうか? 現在のコードをまた質問に載せさせて頂きます。
winterboum

2022/10/17 10:02

そもそも 多対多の 関連定義ができていないから、そこから直しましょう
退会済みユーザー

退会済みユーザー

2022/10/17 11:12

現在、下記の関連定義になっているのですが、planが中間テーブルになるということでしょうか? モデル user has_many :plans, :dependent => :destroy plan has_many :rooms, dependent: :destroy belongs_to :user room belongs_to :plan
winterboum

2022/10/17 11:40

はて この関連だと、はじめに有ったような多対多 ではないですね、 RoomにはUserは一人だけってことですね?
退会済みユーザー

退会済みユーザー

2022/10/17 13:18

Entryですね! class Entry < ApplicationRecord belongs_to :user belongs_to :room end
winterboum

2022/10/17 13:45

それだけだと 多対多にはなりませんよ あと Planを通しての関連と矛盾しますね。 Entryを通しての関連は Room と User は多対多 Planを通しての関連は Room → Plan → User だからRoomのUserは一人
退会済みユーザー

退会済みユーザー

2022/10/17 15:05

関連定義の書く前に想定しているのは 1.roomのレコードを取得して 2.roomにあるplan_idを取得してそこからplanを特定。 3.planにあるuser_idを引き出す 4.そこからうまくroom削除につなげる このような流れを想起したのですが、これは大丈夫でしょうか? そうなると userモデルに has_many :roomを追記するのかなと思ったのですが、、、違いますか?
winterboum

2022/10/17 21:30

操作の流れをイメージすることも必要ですが、 関連の定義は 実際にどういう関係になっているか、の方がじゅうようです。 その流れだと RoomのUserは一人です。それは合ってます?
退会済みユーザー

退会済みユーザー

2022/10/18 03:00

なるほど。。。 てっきりEntryからroomにuserを2人入れるという役割に引っ張られて、Roomの中のuserは2人だと思っていたのですが、RoomのUserが一人ということに気付けていませんでした。。。 現在のroomに関連する関連定義は user.rb has_many :plans, :dependent => :destroy plan.rb has_many :rooms, dependent: :destroy belongs_to :user room.rb belongs_to :plan となっているのですが、RoomとUserに関しての関連定義が必要でしょうか?
winterboum

2022/10/18 05:35

「Entryからroomにuserを2人入れるという役割」だとするとだめですね。 Planのことは別として、User と Roomの関連は user.rb has_many :rooms, t through: :room_users has_many :rooms, t through: :room_users , dependent => :destroy room.rb has_many :users, t through: :room_users has_many :users, t through: :room_users , dependent => :destroy room_user.rb belongs_to :user belongs_to :room でしょう。 Plan と Room, User の 現実世界での関連が分からないので、そちらは書けない。 少なくとも 載せていただいた User, Plan、Room の関連定義では上の関連定義と矛盾します。
退会済みユーザー

退会済みユーザー

2022/10/18 08:44 編集

room_user.rbがEntry.rbと同じ役割かなと考えたのですが、あっていますか? class Entry < ApplicationRecord belongs_to :user belongs_to :room end もしあっていたら、user.rbもroom.rbもwinterboumさんの記述していただいたコードを追記しても 大丈夫でしょうか?
winterboum

2022/10/18 09:29

code的には同じ役割に見えますが、Entryという名前からは想像しにくい、。、、、 code追記は多分大丈夫ですが、Planが矛盾するのは残ります
退会済みユーザー

退会済みユーザー

2022/10/18 09:50

一度試してみようと思うのですが def withdrawal @user = User.find(params[:id]) @room.destroy @user.destroy flash[:notice] = 'ユーザーを削除しました。' redirect_to '/' end 今、roomを抜き出すレコードをとりあえず消してしまったのですが、 @room.destroyも消したほうがいいですか?
退会済みユーザー

退会済みユーザー

2022/10/18 10:17 編集

退会でroomを消せるかを試そうとしていました。 すみません。
winterboum

2022/10/18 10:39

多対多 だから Room消しちゃまずいでしょ。Roomに参加する全員が退会したら削除しても良いけど。 関連定義みてよ、dependent => :destroy するのは :room_users です。
退会済みユーザー

退会済みユーザー

2022/10/18 16:12

roomを残して片方のuserが削除されると、DM一覧ではuserがNilだとエラーが発生します。 そこはNilの時の表示を追加するという流れですか?
winterboum

2022/10/19 04:16

エラーメッセージを翻訳されてしまうと現象がつかめません
退会済みユーザー

退会済みユーザー

2022/10/19 12:23 編集

すみません。退会機能を実行してみます。
退会済みユーザー

退会済みユーザー

2022/10/19 12:46

すみません。 退会機能を実行しようとしたところ、エラーが発生しました。 詳細は質問を更新しました。 ActiveRecord::HasManyThroughOrderError at /users/3/withdrawal Cannot have a has_many :through association 'User#rooms' which goes through 'User#entries' before the through association is defined.
winterboum

2022/10/19 14:44

エラーメッセージに書いてあるでしょ 'User#entries' before the through association って
退会済みユーザー

退会済みユーザー

2022/10/19 16:35 編集

roomを残す形の退会機能にします。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

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

MySQL

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。