mongoid如何获取集合中的所有文档

时间:2015-12-09 10:00:23

标签: ruby-on-rails mongoid

我知道我的问题相当愚蠢但是我已经查看了mongoid教程并且在SO上试图弄清楚如何使用mongoid获取集合中的所有文档,这是mongo shell中db.collection.find()的对应物。

许多SO问题都要求一些标准,我只想得到所有这些标准,不是嵌入式文档,只是db.collection.find()的结果,而是来自mongoid。

我需要这个,因为在我的邮件预览中,我想让所有用户看到发送给他们的电子邮件并确认他们的帐户,我在这里使用Rails 4.2.5和mongoid 5。

我尝试了Model.find和Model.find_by以及Model.pluck,第一个返回nil,第二个返回一个文档(因为我得到的每个未定义的方法用于< #Model ...>)和最后一个一个人只会返回一个键的值。

那怎么办呢?

修改

这是我的模特:

class Researcher 

include Mongoid::Document
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable, :validatable,:confirmable,:recoverable,:omniauthable, :omniauth_providers => [:gplus]
  #, :rememberable, :trackable

  ## Database authenticatable
  field :email,              type: String, default: ""
  field :encrypted_password, type: String, default: ""

  ## Recoverable
  field :reset_password_token,   type: String
  field :reset_password_sent_at, type: Time,localize: true

  ## Rememberable
  #field :remember_created_at, type: Time

  ## Trackable
  #field :sign_in_count,      type: Integer, default: 0
  #field :current_sign_in_at, type: Time
  #field :last_sign_in_at,    type: Time
  #field :current_sign_in_ip, type: String
  #field :last_sign_in_ip,    type: String

  ## Confirmable
  field :confirmation_token,   type: String
  field :confirmed_at,         type: Time,localize: true
  field :confirmation_sent_at, type: Time,localize: true
  field :unconfirmed_email,    type: String # Only if using reconfirmable

  ## Lockable
  # field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
  # field :unlock_token,    type: String # Only if unlock strategy is :email or :both
  # field :locked_at,       type: Time
  field :username, type: String
  field :provider,type: String
  field :uid,type: String

  def self.new_with_session(params, session)
    super.tap do |researcher|
      if data = session["devise.gplus"] && session["devise.gplus"]["extra"]["raw_info"]
        researcher.email = data["email"] if researcher.email.blank?
      end
    end
  end

  def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_create do |researcher|
    researcher.email = auth.info.email
    researcher.password = Devise.friendly_token[0,20]       
  end
end
end

这是我的邮件预览:

class ResearchersMailerPreview < ActionMailer::Preview 
  def initialize
    @vals=Researcher.all
  end
  def confirmation_instructions    
    @vals.each do |val|    
      ResearchersMailer.confirmation_instructions(val,val.confirmation_token , {})
    end
  end
  def reset_password_instructions
    @vals.each do |val|          
      ResearchersMailer.reset_password_instructions(val, val.reset_password_token, {})    
    end
  end
end

2 个答案:

答案 0 :(得分:2)

我认为你需要的是:

Model.all

然后你可以通过循环收集你的每一个。

答案 1 :(得分:0)

Model.all

返回所有文档如果您的选择器为空。 为了在您已经预先选择的情况下访问所有条目,请使用:

Model.unscoped.all