Ruby on Rails и Mongoid сводят меня с ума!Несколько простых вопросов о запросах - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь получить все "карты" из Mongoid, у которых есть запрос = "Предварительный просмотр"

Я делаю это через:

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

У меня есть несколько вопросов.

1) Почему я не могу это сделать?

  @preview_cards = Card.find_by_request("PREVIEW")

Я получаю сообщение об ошибке: неопределенный метод `find_by_request 'для карты: Класс

2) Как только у меня есть картыв переменной @preview_cards я не могу перебирать их.Например:

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

просто возвращает идентификатор объекта #<Mongoid::Criteria:0x103eaf778>

3) Есть ли метод «all», который вы можете вызвать вместо first и last.Например, это работает:

@preview_cards.first.fullname

, но я хочу иметь возможность перебирать каждую «строку» в монго.

Любая помощь будет принята с благодарностью!Спасибо.

1 Ответ

1 голос
/ 10 ноября 2011

Нет схемы, поэтому нет автоматической генерации метода. Вы можете создавать своих собственных помощников.

Ты уверен? Это прекрасно работает для меня. То, что возвращается, отличается от того, что происходит, когда вы пытаетесь выполнить итерацию. Например:

[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" })
...