【问题标题】:Ruby on Rails and Mongoid are driving me nuts! Few simple questions about queryingRuby on Rails 和 Mongoid 快把我逼疯了!关于查询的几个简单问题
【发布时间】:2011-11-10 17:25:39
【问题描述】:

我正在尝试从 Mongoid 中检索所有具有 request="preview" 的“卡片”

我这样做是通过:

  @preview_cards = Card.where("request" => "PREVIEW")

我有几个问题。

1) 为什么我做不到?

  @preview_cards = Card.find_by_request("PREVIEW")

我收到一个错误:Card:Class 的未定义方法 `find_by_request'

2) 一旦我在 @preview_cards 变量中获得了卡片,我就无法遍历它们。例如:

@preview_cards.each do |c| c.fullname end

只需返回对象 id #<Mongoid::Criteria:0x103eaf778>

3) 有没有可以调用的“all”方法,而不是 first 和 last。例如,这有效:

@preview_cards.first.fullname

但我希望能够遍历 mongo 中的每一“行”。

任何帮助将不胜感激!谢谢。

【问题讨论】:

    标签: ruby-on-rails mongodb mongoid database


    【解决方案1】:

    没有模式,所以没有自动生成方法。不过,您可以创建自己的助手。

    你确定吗?这对我来说很好。返回的内容与您尝试迭代后发生的内容不同。例如:

    [19] pry(main)> ts = FooDoc.where("name" => "ohai")
    => #<Mongoid::Criteria
      selector: {"name"=>"ohai"},
      options:  {},
      class:    FooDoc,
      embedded: false>
    
    [20] pry(main)> ts.each { |t| p t.name }
    "ohai"
    => #<Mongoid::Criteria
      selector: {"name"=>"ohai"},
      options:  {},
      class:    FooDoc,
      embedded: false>
    

    要获取所有信息,请使用all

    Card.all(conditions: { request: "PREVIEW" })
    

    【讨论】:

    • 感谢您清理“自动生成方法”——我非常习惯于没有框架的 PHP,并且不知道什么时候应该是神奇的而不是不神奇的。此外,所有方法的“条件”都会引发错误..也许我正在做一些奇怪的事情。无论如何,每个都可以正常工作,所以我会使用它。谢谢。
    • @BrianW 没问题;我使用 Ruby 1.9 语法——你是 1.8 吗?如果是这样,请使用旧的哈希语法。
    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多