0

레일즈를위한 연습으로 레코드를 삭제하지 않고 파괴하려고하지 않습니다.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">]>

주제 페이지와 많은 관계로 하나입니다. 페이지가 속한 주제입니다.

Ed1 : 'second_page'가 로컬 변수 인 것처럼 보입니다. 그래서 레일즈 콘솔을 종료했을 때. 문제를 재현 할 수 없었지만 아직이 레코드를 삭제할 수 없습니다.

Ed2 : 그래서 나는 배움을 계속하기로 결심했고 ERB를 사용하여 subject.pages.size을 사용할 때까지 아무런 문제가 없었습니다. 다시 말하지만 html.erb 파일이 렌더링되지 않는 'NoMethodError'가 있습니다. 페이지를 올바르게 선언하고 있는지 확인하려면 어디에서 검사해야합니까? 나는 선생님의 코드를 두 번 확인했는데 모두 똑같은 것처럼 보였다. (나는 사소한 것이 빠졌을 수있다.)하지만 내 앱에서이 오류를 해결하는 방법을 놓쳤다.

Ed3 (최종) : 생성 된 테이블을 삭제하고 다시 시작했습니다. 솔루션이 실제로 무엇인지는 확실하지 않지만 컨트롤러의 관계를 변경하면 도움이되었다고 생각합니다. 도와 줘서 고맙다.

사용 : 액티브 4.0.0을 4.0.0 레일, MySQL은 5.17.14 당신은 종속 삭제 (파괴) 옵션 오순절 a를 사용하고

답변

0

레코드 삭제의 초기 문제에 답하십시오.

subject.pages.delete(second_page)을 사용하여이 레코드를 삭제할 수는 없지만 Page.find(3).delete을 사용하여 삭제할 수있었습니다.

NoMethodError와 관련된 문제에 답하십시오.

This 의견은이 문제를 파악하는 데 가장 통찰력이있었습니다. 즉, Rails 4.0.0을 사용하고 있기 때문에 발생하는 문제점과 버그가 있습니다. 한 가지 공통적 인 문제는 NoMethodError입니다. 내 Gemfile을 업데이트 한 다음 내 응용 프로그램의 루트 디렉토리에 bundle install을 업데이트하여 4.1.2로 업그레이드했습니다. 그런 다음 레일즈 서버를 다시 시작했는데 문제가 없습니다. subject.pages.size는 렌더링 할 수있었습니다.

0

을 (더 많은 정보가 필요하다면, 나는 즉시 업데이 트됩니다) has_many 연관은 할 수 없습니다. 이 옵션은 belongs_to 연관에만 사용할 수 있습니다.

나는 당신을 도와 줄 수 있었으면 좋겠다.

+0

사과드립니다. 페이지가 belongs_to 주제가됩니다. 그러나 나는 아직도 문제가있다. –

1

APIdock 기록 수단 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.

대한 파괴되지 따르면, 단지 연관. 데이터베이스에서 레코드를 삭제하려면 종속 옵션을 :destroy으로 설정해야합니다.

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