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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

4342閲覧

railsのhas_manyで結び付けたモデルのdestroyについて

rubysyoshinsya

総合スコア35

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2016/05/11 15:18

has_manyで結び付けたモデルのdestroyのエラーについて
"投稿"の削除と同時に、投稿に結びつた"コメント"を削除したいと考えております。

###エラー内容

NameError in PostsController#destroy uninitialized constant Post::Comment

destroyしようとすると上記エラーが表示されます。

###コード

ruby

1#PostsController#destroy 2 def destroy 3 post = Post.find(params[:id]) 4 post.destroy ←ここでで止まります。 5 redirect_to :back, notice: '投稿を削除しました。' 6 end 7

リレーションの設定

ruby

1# 投稿 2class Post < ActiveRecord::Base 3 has_many :comments, :dependent => :destroy 4end 5 6# コメント 7class Comment < ActiveRecord::Base 8 belongs_to :post 9end 10

###確認したところなど
1.モデルの名前は単数形なっているか? =>単数形です。 コントローラーは複数形
2.has_manyは複数形、belongs_toは単数形
3.その他に
:dependent => :destroy ←を設定していない場合はPostは削除されます。
(もちろんCommentは残ります。)

dependent: :delete_all ←を試しましたが同じエラー内容となります。

何か設定等抜けていますでしょうか?

ここらへんを確認すると良いなど御座いましたらご指摘頂けると幸いです。

宜しくお願いします。

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

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

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

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

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

guest

回答2

0

を読むことをお勧めします。
例えば、こんな説明がされています。

...
特定の顧客用に新しい注文を1つ作成する作業が以下のように一行でできるようになりました。
@order = @customer.orders.create(order_date: Time.now)

顧客と、顧客の注文をまとめて削除する作業はさらに簡単です。
@customer.destroy
...

投稿2016/05/11 22:35

katoy

総合スコア22324

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

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

0

ベストアンサー

saveメソッドやupdateメソッドでコメントが関連付けされて保存されてないからなきがします。
saveメソッド実行後rails dbconsoleで該当テーブルにクエリを投げてみるか。rails cでComment.allで該当のposts_idをきちんと参照出来ているCommentが生成されているかどうか確認してください。
ちなみに子要素を多段階保存する場合も色々な明示的にコードを付け足す必要があるので付け加えられているか確認してみてください。
最近のベストプラクティスはformモデルとserviceモデルを作ってロジックとパラメータバリデーションを分離させる方法なので御存知なければ調べてみると良いかもしれないです。

投稿2016/05/11 20:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問