Rails + MongoID - Запрос по атрибуту - PullRequest
6 голосов
/ 17 марта 2012

У меня есть такая модель:

class Lesson
  include Mongoid::Document

  field :title, :type => String
  field :category, :type => String
  field :price, :type => Float
  field :description, :type => String
  field :user_id, :type => String


  validates_presence_of :title
  validates_presence_of :category
  validates_presence_of :price
  validates_presence_of :user_id

  attr_accessible :title, :category, :description, :price

end

И я пытаюсь сделать запрос вот так:

@lessons_by_user = Lesson.find_by_user_id current_user.id

И я получаю:

неопределенный метод `find_by_user_id 'для урока: класс

Как выполнить запрос по определенному атрибуту в MongoID?

Я знаю, как это сделать так:

@lessons = Lesson.all(:conditions=>{:user_id=>current_user.id.to_s}) 

но мне интересно, есть ли ярлык ...

Ответы [ 2 ]

10 голосов
/ 17 марта 2012

Mongoid не имеет автоматически созданных методов поиска в стиле ActiveRecord, он поддерживает только ограниченный набор предопределенных методов поиска :

  • Model.all
  • Model.count
  • Model.exists?
  • Model.find
  • Model.find_or_create_by
  • Model.find_or_initialize_by
  • Model.first
  • Model.last

Однако он имеет общее назначение where метод , так что вы говорите это:

@lessons = Lesson.where(:user_id => current_user.id)

where также является цепным (так же, как where в более новых версиях ActiveRecord), так что вы можете добавить больше условий или указать порядок, связав больше вызовов критериев.

3 голосов
/ 25 января 2014

Начиная с версии 3.0.0 Mongoid, вы также можете сделать:

@lessons = Lesson.find_by(user_id: current_user.id)

В отличие от where, возникнет исключение Mongoid::Errors::DocumentNotFound, если запрос не вернет результата.Это поведение по умолчанию, но если вы установите для параметра конфигурации raise_not_found_error значение false, в этом случае будет просто возвращено nil.

Источник: http://mongoid.org/en/mongoid/docs/querying.html

...