我知道我的问题相当愚蠢但是我已经查看了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
答案 0 :(得分:2)
我认为你需要的是:
Model.all
然后你可以通过循环收集你的每一个。
答案 1 :(得分:0)
Model.all
返回所有文档如果您的选择器为空。 为了在您已经预先选择的情况下访问所有条目,请使用:
Model.unscoped.all