如何在mongodb中运行继承的类的方法?

时间:2019-04-03 08:23:27

标签: ruby mongodb class methods

例如,我创建了从下面的BaseClass继承的ChildClass:

@IBDesignable
class RoundedButton: UIButton {
    @IBInspectable var cornerRadius: CGFloat {
        get { return layer.cornerRadius }
        set { layer.cornerRadius = newValue }
    }

    override init(frame: CGRect = .zero) {
        super.init(frame: frame)
        setUpView()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setUpView()
    }
}

private extension RoundedButton {
    func setUpView() {
        cornerRadius = 4.0
    }
}

第一堂课

class BaseClass

end

或另一个

class ChildClass1 < BaseClass

end

与BaseClass一起使用时 正常。

但是当使用ChildClass 1或2时, 我无法执行childclass1.count或childclass1.first 错误如下:(当保存子类后在此处使用子类时)

class ChildClass2 < BaseClass

end

我做错了什么? (是的,我看到来自“创建”的错误,但已保存!如图所示)

[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

1 个答案:

答案 0 :(得分:0)

我发现ChildClass将像BaseClass一样工作。起初因为user_id为nil而不起作用的原因。

另一个问题是mongodb在内部处理其子类的方式与在其BaseClass中处理另一种数据一样!即使我们在创建时放置名称空间。我感到惊讶的是,rails的mongodb响应名称空间与众不同之处在于,它创建了另一个易于理解的集合(表)(我首先要寻找的内容),而不是被隐藏为另一个让我一开始感到困惑的_type(字段)。所以我想在这里为新手做笔记。

enter image description here

代替我在下面期望的其他收藏 enter image description here