首页 > 解决方案 > 如何在不使用模型常量的情况下在路线中使用模型?

问题描述

我想在我的routes.rb文件中使用模型而不实际调用模型的常量。这样做的目的是不让 Rails 在访问路由文件时检查数据库,因为它会在下面描述的未迁移服务器的边缘情况下以某种方式导致意外行为。

目前,我有一行代码使用了模型的常量,但我只是在第一次迁移之前将其注释掉,它工作正常。但我觉得可能有更好的做法,所以我想知道:是否有其他方法可以使用模型中的方法而不使用路由文件中的模型常量?

目前,我的路线文件如下所示:

Rails.application.routes.draw do
  # …
  get 'universal' => 'novels#edit', defaults: { id: Novel.fetch_universal.id }
end

虽然此文件在迁移后可以正常工作,但Novel必须先注释掉模型名称常量所在的行,然后才能迁移任何新数据库。如果没有注释掉,那么 rails 将在任何数据库操作之前尝试检查数据库中的小说表(甚至包括使用 删除数据库rake db:drop),并且会抛出一个错误,即找不到表“小说”。

标签: ruby-on-rails

解决方案


您可以尝试以下我猜,

{ id: (ActiveRecord::Base.connection.tables.include?('novels') ? Novel.fetch_universal.id : [] }

它应该工作,未经测试!


推荐阅读