문제

나는 Mongomapper와의 클래스 상속을 사용하면서 더 나은 결과를 얻으려고 노력하고 있지만 약간의 문제가 있습니다.

class Item
  include MongoMapper::Document

  key :name, String
end

class Picture < Item
  key :url, String
end

class Video < Item
  key :length, Integer
end

다음 명령을 실행할 때, 그들은 내가 기대하는 것을 반환하지 않습니다.

>> Item.all
=> [#<Item name: "Testing", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, views: 0, user_id: 4b416844010e2a04d0000001, description: "lorem?">]
>> Video.all
=> [#<Video name: "Testing", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, views: 0, user_id: 4b416844010e2a04d0000001, description: "lorem?">]
>> Picture.all
=> [#<Picture name: "Testing", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, views: 0, user_id: 4b416844010e2a04d0000001, description: "lorem?">]

그들은 모두 같은 결과입니다. Item.all 자체를 포함하여 모든 결과를 나열하십시오. Picture, 그리고 Video. 그러나 항목이 실제로 a 인 경우 Picture, 내가 달렸다면 반환되기를 바랍니다. Picture.all 그리고 내가 달리는 경우가 아닙니다 Video.all. 내 말이 무슨 뜻인지 보십니까?

여기서 상속이 어떻게 작동하는지 오해하고 있습니까? 내가 이런 종류의 행동을 복제하는 가장 좋은 방법은 무엇입니까? 나는 따라하려고 노력하고있다 이것 (포인트 2) 내가이 작업을 원하는 방식에 대한 지침으로. 나는 그가 달릴 수 있다고 생각합니다 Link.all 모든 링크를 찾고 상속하는 다른 모든 클래스를 포함하지 않으려면 Item. 내가 잘못?

도움이 되었습니까?

해결책

당신이 링크하는 예는 약간 오해의 소지가 있습니다 (또는 아마도 따라 가기가 어려울 것입니다). Item 모델. 모델에서 상속을 사용하려면 키를 정의해야합니다. _type 부모 모델에서. 그런 다음 Mongomapper는 해당 키를 해당 문서의 실제 클래스 이름으로 자동 설정합니다. 예를 들어, 모델은 이제 다음과 같습니다.

class Item
  include MongoMapper::Document

  key :name, String
  key :_type, String
end

class Picture < Item
  key :url, String
end

class Video < Item
  key :length, Integer
end

그리고 당신의 검색의 출력 (당신이 생성했다고 가정합니다. Picture 객체)로 변합니다.

>> Item.all
=> [#<Picture name: "Testing", _type: "Picture", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, views: 0, user_id: 4b416844010e2a04d0000001, description: "lorem?">]
>> Video.all
=> []
>> Picture.all
=> [#<Picture name: "Testing", _type: "Picture", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, views: 0, user_id: 4b416844010e2a04d0000001, description: "lorem?">]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top