ruby-on-rails - 使用 rake 数据库 :migrate with sinatra and activerecord (not rails)

标签 ruby-on-rails ruby activerecord sqlite sinatra

我正在将 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

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

gem 文件

# 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}")

异常(exception):

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

我得到的对象是 nil(我用 find_admin.nil 检查过?)

最佳答案

首先,尝试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 作为输入来找到上述管理员。

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

关于ruby-on-rails - 使用 rake 数据库 :migrate with sinatra and activerecord (not rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32452382/

相关文章:

ruby-on-rails - 使用 Capistrano 部署时,Rails 5 控制台不工作

ruby-on-rails - Airbrake 和 Spree 商业 API : undefined method `airbrake_request_data`

Ruby Gem 安装在 gem 目录中创建空文件夹

ruby-on-rails - 此括号语法的 Ruby 2.4 文档

ruby-on-rails - iTunes 将 "trackid"通过匹配保存在 iCloud 上的文件的位置

ruby-on-rails - ActionController::RoutingError(类的未定义方法 `before_filter'):错误

mysql - 如何在 Rails 3.1.0 应用程序中访问多个数据库?

mysql - ActiveRecord MySQL 在查询期间丢失与 MySQL 服务器的连接

javascript - rails 5 : Nested forms and existing associated objects

ruby-on-rails - Rails 社区命名连接模型的命名约定有哪些优点?