Как запустить метод унаследованного класса в mongodb? - PullRequest
0 голосов
/ 03 апреля 2019

Например, я создал ChildClass, унаследованный от BaseClass ниже:

class BaseClass

end

Первый детский класс

class ChildClass1 < BaseClass

end

Или другой

class ChildClass2 < BaseClass

end

При работе с BaseClass Работает как обычно.

Но при работе с ChildClass 1 или 2, Я не могу сделать childclass1.count или childclass1.first Следующие ошибки: (при работе с дочерним классом после сохранения, как показано здесь)

[2] pry(#<TodosController>)> @todo = "Todo::TodoM#{$xvars["user_id"].to_s}".constantize.new
=> #<Todo::TodoM5ca1157c51d2f56bc4d5e379 _id: 5ca45c5651d2f5988c2ef5fa, created_at: nil, updated_at: nil, user_id: nil, title: nil, completed: nil, due: nil, detail: nil, image: nil, member: nil, status: nil, _type: "Todo::TodoM5ca1157c51d2f56bc4d5e379">
[3] pry(#<TodosController>)> @todo = "Todo::TodoM#{$xvars["user_id"].to_s}".constantize.new(
[3] pry(#<TodosController>)*   title: $xvars["form_todo"]["title"],
[3] pry(#<TodosController>)* user_id: $xvars["user_id"])
=> #<Todo::TodoM5ca1157c51d2f56bc4d5e379 _id: 5ca45ca351d2f5988c2ef5fb, created_at: nil, updated_at: nil, user_id: BSON::ObjectId('5ca1157c51d2f56bc4d5e379'), title: "sdfsdf", completed: nil, due: nil, detail: nil, image: nil, member: nil, status: nil, _type: "Todo::TodoM5ca1157c51d2f56bc4d5e379">
[4] pry(#<TodosController>)> @todo.save!
MONGODB | localhost:27017 | todo2_development.insert | STARTED | {"insert"=>"todos", "ordered"=>true, "lsid"=>{"id"=><BSON::Binary:0x70237914801960 type=uuid data=0x0c897c8df79a4052...>}, "documents"=>[{"_id"=>BSON::ObjectId('5ca45ca351d2f5988c2ef5fb'), "_type"=>"Todo::TodoM5ca1157c51d2f56bc4d5e379", "title"=>"sdfs...
MONGODB | localhost:27017 | todo2_development.insert | SUCCEEDED | 0.006s
=> true
[5] pry(#<TodosController>)> @todo.first
NoMethodError: undefined method `first' for #<Todo::TodoM5ca1157c51d2f56bc4d5e379:0x00007fc31453c828>
from (pry):6:in `create'
[6] pry(#<TodosController>)> @todo
=> #<Todo::TodoM5ca1157c51d2f56bc4d5e379 _id: 5ca45ca351d2f5988c2ef5fb, created_at: 2019-04-03 07:11:48 UTC, updated_at: 2019-04-03 07:11:48 UTC, user_id: BSON::ObjectId('5ca1157c51d2f56bc4d5e379'), title: "sdfsdf", completed: nil, due: nil, detail: nil, image: nil, member: nil, status: nil, _type: "Todo::TodoM5ca1157c51d2f56bc4d5e379">
[7] pry(#<TodosController>)> @todo.save!
=> true
[8] pry(#<TodosController>)> @todo.count
NoMethodError: undefined method `count' for #<Todo::TodoM5ca1157c51d2f56bc4d5e379:0x00007fc31453c828>
from (pry):9:in `create'
[9] pry(#<TodosController>)> @todo.first
NoMethodError: undefined method `first' for #<Todo::TodoM5ca1157c51d2f56bc4d5e379:0x00007fc31453c828>
from (pry):10:in `create'
[10] pry(#<TodosController>)> @todo.first
NoMethodError: undefined method `first' for #<Todo::TodoM5ca1157c51d2f56bc4d5e379:0x00007fc31453c828>
from (pry):11:in `create'
[11] pry(#<TodosController>)> @todo.class
=> Todo::TodoM5ca1157c51d2f56bc4d5e379

Что я сделал не так? (Да, я вижу ошибку «создать», но она сохранена! Как показано)

{
  "_id": ObjectId("5ca45ca351d2f5988c2ef5fb"),
  "_type": "Todo::TodoM5ca1157c51d2f56bc4d5e379",
  "title": "sdfsdf",
  "user_id": ObjectId("5ca1157c51d2f56bc4d5e379"),
  "updated_at": new Date(1554275508224),
  "created_at": new Date(1554275508224)
}

1 Ответ

0 голосов
/ 13 апреля 2019

Я обнаружил, что ChildClass будет работать как BaseClass. Причина того, что в начале не работало, потому что user_id был nil.

Другая проблема заключается в том, как mongodb обрабатывает свой подкласс так же внутренне, как и другой тип данных в своем базовом классе! даже если мы поместим пространство имен при создании. Что меня удивило, так это то, что пространство имен ответов mongodb от rails отличается тем, что создало другую коллекцию (таблицу), которую легко понять (и то, что я сначала искал) вместо того, чтобы скрыть ее как другой _type (поле), которое поначалу меня смущает. Так что я хотел бы отметить здесь для новичка.

enter image description here

вместо того, что я ожидал ниже в качестве другой коллекции enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...