저는 제 레일 프로젝트에서 버그를 알아 내는데 매우 짜증나고 힘듭니다.레일스 모델의 속성이 0이 아닌 것처럼 보입니다.
일련의 모델과 그 관계를 만든 후에 나는 그 모델을 나열하고 싶습니다.
하지만 계속 "NilClass를 dup 할 수 없습니다"오류가 발생합니다. 즉, 서버를 다시 시작할 때까지입니다. 그럼 나는 그들을 잘 목록으로 만들 수있다.
이 문제를 디버깅 할 때 해당 특성 값 중 하나의 값을 반환하려고 시도 할 때 모델 중 하나의 메서드에서 오류가 발생하는 것으로 나타났습니다. 메소드에 중단 점이 있는데 디버거에서 얻은 것입니다.
(rdb:5) self #<Bar id: 1037, foo: 2237, created_at: "2009-06-09 19:52:11", updated_at: "2009-06-09 19:52:47"> (rdb:5) foo TypeError Exception: can't dup NilClass (rdb:5) attributes[:foo] nil (rdb:5) attributes["foo"] 2237
페이지를 새로 고침해도 상관 없습니다. 서버를 다시 시작할 때까지 동일한 오류가 발생합니다.
내 모델은 기본적으로 (오류가 방법 바즈에서 발생) 다음과 같습니다:
class FooBar < ActiveRecord::Base
belongs_to :foo, :class_name => "BarFoo", :foreign_key => "foo", :dependent => :destroy
belongs_to :bar, :class_name => "BarFoo", :foreign_key => "bar", :dependent => :destroy
validates_presence_of :foo, :on => :create
def baz
[foo, bar].compact
end
end
내 스키마는 다음과 같습니다
create_table "foo_bar", :force => true do |t|
t.integer "foo"
t.integer "bar"
t.datetime "created_at"
t.datetime "updated_at"
end
업데이트 :
내가 도착하기 전에 foo와 "foo"는 같지 않습니다. 나는 그것들이 평등하지 않다는 것을 알고 있습니다. 그러나 그것은 여기서 문제가되지 않습니다.
그리고 read_attribute ("foo")가 read_attribute (: foo)와 동일한 결과를 반환하는 것으로 확인되었습니다. 그리고 self [: foo]와 self [ "foo"]도 마찬가지입니다. 이들 중 아무 것도 반환하지 않습니다. 그러나 그들은 모두 foo 대신에 foo의 id를 반환합니다.
모델에 대한 데이터베이스 스키마, foo 메소드 정의 및 foo를 설정하는 코드에 대한 자세한 정보를 제공해야한다. –