【问题标题】:Create mongodb model in rails4在 rails4 中创建 mongodb 模型
【发布时间】:2014-01-04 13:54:12
【问题描述】:

我是 Rails 开发的新手。在 rails4 中使用 mongoid 时,我不知道如何将我构建的模型映射为本地 mongodb 中的表。

这里是 user.rb:

class User

  include Mongoid::Document
  include Mongoid::Timestamps

  field :username, type: String
  field :email, type: String
  field :role, type: String
  field :password, type: String

  validates_presence_of :username, :password
  validates_uniqueness_of :username
  validates_inclusion_of :role, in: %w(guest admin)

  class << self
    def authenticate(username, password)
      user = find_by(username: username, password: password)
      if user
        user
      end
    end
  end
end

根据rails启动指南。我们可以使用rails generate model User,然后rake db:migrate 在表中创建模型。但是当我使用 mongodb 作为数据库时,我很困惑。

现在数据库已经配置成功,这意味着我的本地环境有我配置的数据库。但是用户表不存在,我只想知道如何使模型映射到数据库中的表。我必须用一些命令创建它还是只需要在某个地方加载模型。非常感谢你们回答这个问题。

【问题讨论】:

  • 如果其中一个答案解决了您的问题,请将其标记为已接受。

标签: ruby-on-rails model mongoid migrate


【解决方案1】:

对于 MongoDB,您不需要迁移,因为它的架构更少。只需存储一条记录,它就会出现在您的数据库中。

而且因为它的架构更少,您可以更改 Rails 模型,而无需迁移数据库,MongoDB 不会打扰。但请确保您的应用程序可以处理存储内容的两个版本。

但是,如果您愿意,您可以编写迁移,将旧数据转换为新架构,当您更改 Rails 模型中的某些内容时(但我不会在我有一些生产数据之前开始编写迁移,用于开发可以删除数据库并重新创建它)。但正如我所说,这只会困扰您的 Rails 应用程序。 MongoDB 允许您在没有迁移的情况下完成所有操作。

【讨论】:

  • 从下面的文章中,我得到了一些参考。在我的命令中创建 user.rb 运行 rake db:mongoid:create_indexes 之后,用户文档实际上是在数据库中创建的。更多参考,请访问:railsapps.github.io/tutorial-rails-mongoid-devise.html
  • @gongmingqm10 该命令用于生成索引,它与将模型映射到 mongo 中的集合无关(如 23tux 所说,您可以简单地存储一条记录,它将出现在数据库中)。您没有向问题中显示的模型添加任何索引,因此 mongoid 不需要生成索引。
【解决方案2】:

注意以下事项。

  1. 在使用 mongoDB 生成 rails 应用程序时跳过活动记录。

    • rails new app_name --skip-active-record
  2. 打开 config/application.rb 并在顶部附近,删除行 require "rails/all" 并添加以下行,以便您最终得到这个

    • 需要“action_controller/railtie”
    • 需要“action_mailer/railtie”
    • 需要“active_resource/railtie”
    • 需要“rails/test_unit/railtie”
  3. Rails 3.2+ 您还需要删除驻留在您的环境中的 Active Record 配置选项,config/environments/development.rb

    • # config.active_record.mass_assignment_sanitizer = :strict
    • # config.active_record.auto_explain_threshold_in_seconds = 0.5
  4. Rails 3.2.3+ 您还需要在 config/application.rb 中注释掉以下行

    • # config.active_record.whitelist_attributes = true

用 mongoDB 设计 rails 应用程序很有趣!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2016-12-05
    • 2016-02-20
    相关资源
    最近更新 更多