首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找所有记录的rails-4 mongoid-4查询给出了未定义方法`to_sym‘for nil:NilClass

查找所有记录的rails-4 mongoid-4查询给出了未定义方法`to_sym‘for nil:NilClass
EN

Stack Overflow用户
提问于 2014-07-21 20:43:22
回答 1查看 782关注 0票数 1

我使用的是Rails 4.1.4、Mongoid4.0和ruby2.1.2p95。在我的控制器索引中,总是返回未定义方法`to_sym‘for nil:NilClass。数据库和rails控制台中都有记录,运行@email_templates = EmailTemplate.all.to_a命令将返回数据库中的所有记录。

这是控制器索引。

代码语言:javascript
复制
 class EmailTemplatesController < ApplicationController

    def index
       @email_templates = EmailTemplate.all.to_a
    end
  end

模型的简写版本

代码语言:javascript
复制
  class EmailTemplate
   include Mongoid::Document
   field :name, type: String
   field :subject, type: String
   field :from, type: String
   field :to, type: String
   field :body, type: String
   field :template, type: BSON::Binary
  end

为什么这个@email_templates = EmailTemplate.all.to_a在rails控制台中工作,但是在从控制器的索引操作调用时返回错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-22 20:11:05

结果发现问题在于我的mongoid.yml没有正确地选择通过rails 4.1 secrets.yml文件传入的数据库设置。

,所以在文件中,而不是在我的config/secils.yml文件中

代码语言:javascript
复制
  default: &mongodb
  mongodb_host: <%= ENV['TRG_MONGODB_HOST'] %>
  mongodb_host_port: <%= ENV['TRG_MONGODB_HOST_PORT'] %>
  mongodb_database: <%= ENV['TRG_MONGODB_DATABASE'] %>
  mongodb_db_username: <%= ENV['TRG_MONGODB_DB_USER'] %>
  mongodb_db_passowrd:  <%= ENV['TRG_MONGODB_DB_PASSWORD'] %>

  development:
    secret_key_base: xxxxxxxxyyyy
    <<: *mongodb

我们有这样的设置,数据库设置键在config/secils.yml文件中以符号作为前缀,如下所示:

代码语言:javascript
复制
  default: &mongodb
  :mongodb_host: <%= ENV['TRG_MONGODB_HOST'] %>
  :mongodb_host_port: <%= ENV['TRG_MONGODB_HOST_PORT'] %>
  :mongodb_database: <%= ENV['TRG_MONGODB_DATABASE'] %>
  :mongodb_db_username: <%= ENV['TRG_MONGODB_DB_USER'] %>
  :mongodb_db_passowrd:  <%= ENV['TRG_MONGODB_DB_PASSWORD'] %>

如您所见,我使用错误的方式将配置从secrets.yml文件传递到mongoid.yml或database.yml文件。

代码语言:javascript
复制
 Rails.application.secrets.mongodb_db_username

而不是像这样使用嵌入的红宝石:

代码语言:javascript
复制
 <%= Rails.application.secrets.mongodb_db_username %>

mongoid.yml中的最终uri现在看起来如下所示:

代码语言:javascript
复制
 uri: mongodb://<%= Rails.application.secrets.mongodb_db_username %>:<%= Rails.application.secrets.mongodb_db_password %>@<%= Rails.application.secrets.mongodb_host %>:<%= Rails.application.secrets.mongodb_host_port %>/<%= Rails.application.secrets.mongodb_database %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24874368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档