【问题标题】:using rake db:migrate with sinatra and activerecord (not rails)使用 rake db:migrate with sinatra 和 activerecord(不是 rails)
【发布时间】:2015-12-03 19:39:16
【问题描述】:

我将 rake 与 sinatra 和 activerecord(不是 rails)一起使用。我有两个模型类 - Admin(在 admin.rb 中)和 Bill(bill.rb)。我能够使用以下输出运行 rake db:create_migrations(但我看不到数据库中的任何表 - sqlite)。知道我可能做错了什么吗?

== 20150907135939 CreateAdmins: migrating ======================================
-- create_table(:admins)
   -> 0.0011s
== 20150907135939 CreateAdmins: migrated (0.0012s) =============================

== 20150907140840 CreateBills: migrating ======================================
-- create_table(:bills)
   -> 0.0005s
== 20150907140840 CreateBills: migrated (0.0006s) =============================

Rakefile

# Rakefile

require './app'
require 'sinatra'
require 'active_record'
require 'sinatra/activerecord/rake'

宝石文件

# Gemfile

source 'https://rubygems.org'


gem "sinatra"
gem "activerecord"
gem "sinatra-activerecord"
gem 'sinatra-flash'
gem 'sinatra-redirect-with-flash'
gem 'rake'
gem 'sqlite3'

=begin
group :development do
 gem 'sqlite3'
 gem "tux"
end

group :production do
 gem 'sqlite3'
end
=end

当我在 test.rb 文件中运行以下查询时,出现异常:

puts("type email address of admin")
admin_email = gets.chomp
find_admin = Admin.find_by(email:admin_email) # read
puts("admin retrieved with email: #{find_admin.email} and name: #{find_admin.name}")

例外:

test.rb:41:in `<main>': undefined method `email' for nil:NilClass (NoMethodError)

我返回的对象是 nil(我使用 find_admin.nil 检查过?)

【问题讨论】:

  • 尝试用一些数据填充表并检查 wither activerecord 是否报告错误。
  • 我没有收到 Ruby 错误(我使用了 Admin.create!并传递了参数)。但是,当我在 sqlite shell 中输入 select * from admins 时,我没有得到任何回复)。
  • 检查并确保一切都在同一个环境中运行?你没有填充开发数据库,​​并从产品中读取。还要查看磁盘上的 db 文件,确保所有内容都在同一个地方。

标签: ruby-on-rails ruby activerecord sqlite sinatra


【解决方案1】:

首先,在输入电子邮件后尝试strip前导和尾随空格,如下所示:

admin_email = gets.chomp.strip
puts "admin_email: #{admin_email.inspect}"

然后,再次尝试您的脚本。它应该可以工作。

为了解释这里发生了什么,您的查询:

find_admin = Admin.find_by(email:admin_email)

在提供的电子邮件中找不到管理员记录。所以,它是一个 nil 对象,当您调用:find_admin.emailnil.email 时,您会收到错误消息:

undefined method `email' for nil:NilClass (NoMethodError)

您需要确保拥有给定电子邮件的管理员。为此,您可以先在 Rails 控制台中创建一个,执行以下操作:

Admin.create!(email: 'testadmin@test.com')

然后,尝试通过输入testadmin@test.com 来找到上面的管理员。

如果数据库中存在给定电子邮件的管理员记录,它应该可以工作。

【讨论】:

  • 我早先解决了 - 忘了在这里更新。未正确保存用户。
  • 我以为我接受了,但显然没有——我现在接受了。感谢您的帮助。
猜你喜欢
  • 2015-12-03
  • 2020-05-24
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2013-12-28
相关资源
最近更新 更多