【问题标题】:Error in Ruby logs -> ActiveRecord::RecordNotFound (Couldn't find Plan with 'id'=1):Ruby 日志中的错误 -> ActiveRecord::RecordNotFound(找不到“id”=1 的计划):
【发布时间】:2017-04-19 17:06:27
【问题描述】:

我在使用 Heroku 时遇到问题,我有一个在 C9 上运行良好的项目,但是当我推送到 Heroku 时,它在日志中出现以下错误

ActiveRecord::RecordNotFound(找不到 'id'=1 的计划)

导致我的主页出现以下错误 ->

您要查找的页面不存在。

您可能输入了错误的地址或页面可能已移动。

home.html.erb

<div class="row">
    <div class="col-md-6">
        <div class="well">
            <h3 class="text-center">Basic membership</H3>
            <h4>Hier inschrijven voor alle leden van het gezin.</h4>
            <br />
            <%= link_to "Sign up free", new_user_registration_path(plan: Plan.find(1).id), class: 'btn btn-primary btn-lg btn-block' %>
        </div>
    </div>

     <div class="col-md-6">
         <div class="well">
             <h3 class="text-center">Premium membership</h3>
             <h4>Niet gebruiken dit is een test object.</h4>
             <br />
             <%= link_to "Sign up for premium plan", new_user_registration_path(plan: Plan.find(2).id), class: 'btn btn-success btn-lg btn-block' %>
         </div>

pages_controller

class PagesController < ApplicationController
    def home
        @basic_plan = Plan.find(1)
        @pro_plan = Plan.find(2)
    end

    def about
    end
end

我正在使用 devise gem 来存储用户,如下面的 sn-p 所示

Rails.application.routes.draw do
  devise_for :users
  resources :contacts
  get '/about' => 'pages#about'
  root 'pages#home'

一切都从 master 分支备份到 GitHub,然后再次通过 master 推送到 Heroku...找不到解决方案,欢迎帮助:)

【问题讨论】:

  • C9 数据库将在 plans 表中包含 Heroku 不可用的数据。您需要在生产数据库中创建这些数据。

标签: ruby-on-rails ruby git heroku activerecord


【解决方案1】:

ActiveRecord::RecordNotFound(找不到 'id'=1 的计划)

显然,您的数据库中没有 Planid = 1

使用硬编码的 id 查找记录是不好的做法:

new_user_registration_path(plan: Plan.find(1).id)

你也可以这样做

new_user_registration_path(plan: 1)

Plan.find(1).id 只会返回给你1

new_user_registration_path(plan: Plan.find_by_name('Premium').try(:id))

注意:还要确保您在生产数据库上创建了Plans

【讨论】:

  • 是的,我为计划分配了变量,我只是通过硬编码尝试了它,以查看这是错误的一部分,似乎问题不会将其更改回变量名:)。谢谢输入。而且我确实没有将我的数据库正确迁移到 Heroku,这对这些东西来说是很新的......
【解决方案2】:

您的 Plan 表可能是空的或使用任何其他 id 创建的计划,您应该从 C9 导出 DB 并将其导入到 Heroku

作为额外说明,您不能依赖 id,id 列是自动递增的,如果您创建了一些平面并在之后删除,那么新创建的计划可能以 id=5 开头,如果您甚至强制你仍然不应该这样做的 id。

如果您有计划名称或计划表的任何其他 uniq 列,我的建议是使用它:

Plan.find_by_name('plan_name').id

甚至使用:(如果您确定始终先创建免费计划)

Plan.order('id').first
Plan.order('id').last

【讨论】:

    【解决方案3】:

    检查您的 heroku 数据库。您的计划表很可能是空的。

    【讨论】:

    • 好的,这似乎是我使用“heroku run rails console”并检查 Plan.all 为空的情况,虽然我多次迁移数据库,但我并不明白这是怎么回事,使用“ heroku run rake db:migrate" 我想我使用了错误的命令?
    • rake db:migrate 仅创建和更新您的数据库架构。要加载默认数据,您需要使用 seed.rb 并运行 rake db:seed。
    • 谢谢你的帮助,至少我知道我的错是什么:)
    【解决方案4】:

    我遇到了同样的问题,但是对 ruby​​/rails 太陌生了,我不知道如何将计划添加到 Heroku db ..正如上面每个人都提到的那样:P 在点击 stackoverflow 很多时间之后,我终于弄清楚了。如此简单!

    对于像我这样的其他菜鸟,以下是在 Heroku 中创建表格的方法。 (这种情况下的计划表)

    $ Heroku run rails console
    > Plan.create(name: 'basic', price: 0)
    > Plan.create(name: 'pro', price: 10)
    

    然后检查它是否有效:

    > Plan.all
    

    这应该列出您的计划及其对应的“id”。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多