0

私は、Railsの学習練習としてレコードを削除しようとしていますが、破壊しないでください(どちらも動作しません)。NoMethodError、ActiveRecord 4.0

レールコンソールで、私はsubject.pages.delete(second_page)を実行し、以下のエラーメッセージが表示されます(破棄しようとしても同じです)。 subject.pagesで

NoMethodError: undefined method `name' for nil:NilClass

です:

=> #<ActiveRecord::Associations::CollectionProxy [#<Page id: 2, subject_id: 1, name: "First Page", permalink: "first", position: 1, visible: false, created_at: "2016-08-19 17:58:02", updated_at: "2016-08-19 17:58:02">, #<Page id: 3, subject_id: 1, name: "Second Page", permalink: "second", position: 2, visible: false, created_at: "2016-08-19 17:59:07", updated_at: "2016-08-19 17:59:07">]>

件名はページを持つ多くの関係へのいずれかを持っています。ページはsubject_objectに属します。

Ed1: 'second_page'はローカル変数です。だから私はRails Consoleを終了しました。私は問題を再現できませんでしたが、まだこのレコードを削除することはできません。

Ed2:私は学習を続けることに決めました。私はERBをsubject.pages.sizeに呼び出すまで、何の問題も生じませんでした。ここでも、html.erbファイルがレンダリングされない「NoMethodError」があります。私はページを正しく宣言していることを確認するためにどこをチェックすべきですか?私は教師のコードをダブルチェックし、それはすべて同じように見える(私は何かマイナーが見逃す可能性があります)が、私のアプリでこのエラーを修正する方法に失われています。

Ed3(最終):作成したテーブルを削除して、やり直しました。私は解決策が実際には何だったのかは分かりませんが、コントローラーの関係を変えることが助けになったと思います。助けてくれてありがとう。 Railsの4.0.0、ActiveRecordの4.0.0、MySQLの5.17.14(より多くの情報が必要な場合は、私はすみやかに更新します)

答えて

0

レコードを削除する最初の問題に答えるには

subject.pages.delete(second_page)を使用してこのレコードを削除できませんでしたが、Page.find(3).deleteを使用して削除できました。

NoMethodErrorに関する問題に答えるには

Thisコメントはこの問題を発見するのに最も洞察力がありました。つまり、私はRails 4.0.0を使用していたので、問題やバグが発生しています。 1つのよくある問題は、NoMethodErrorです。私は自分のGemfileを更新してから私のアプリのルートディレクトリにあるbundle installを4.1.2にアップグレードしました。私はその後、Railsサーバーを再起動し、問題はありませんでした。 subject.pages.sizeはレンダリングできました。

0

あなたは(破壊)に依存し、削除を使用しているオプションの聖霊降臨祭aを:使用

has_many関連付けはできません。このオプションは、belongs_to関連付けに対してのみ使用できます。

私はあなたに役立つことができたらいいと思う!レコードは、唯一の関連性を破壊しないことを意味delete(*records)

For has_many associations, the deletion is done according to the strategy specified by the :dependent option.[...] If no :dependent option is given, then it will follow the default strategy. The default strategy is :nullify. This sets the foreign keys to NULL.

ためAPIdockによれば

+0

私はお詫び申し上げます。ページはサブジェクトに属します。しかし、私はまだ問題を抱えています。 –

1

。 データベースからレコードを削除するには、従属オプションを:destroyに設定する必要があります。

class Subject < ActiveRecord::Base 
    has_many :pages, dependent: :destroy 
end