【发布时间】:2019-10-28 21:03:59
【问题描述】:
我正在使用 ActiveRecord 创建一个 Sinatra 应用程序来保存数据。当我运行 rake db:migrate 时,它会自动生成一个 schema.rb 文件,其中包含带有 force::cascade 的表名。这不会让我保存/保留我的数据。如果我删除此文件,我可以保存/保留数据。但是,每次迁移都会生成此架构文件。我不知道如何阻止这种情况发生。
class CreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users do |t|
t.string :name
t.string :email
t.string :password_digest
end
end
end
require "./config/environment"
require "./app/models/user"
class UserC < Sinatra::Base
configure do
set :views, "app/views"
enable :sessions
set :session_secret, "password_security"
end
end
require "bundler"
Bundler.require
ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:database => "development.sqlite"
)
require_all 'app'
require_all 'db'
require_relative './config/environment'
use Rack::MethodOverride
#use Rack::Session::Cookie
run UserController
#gemfile # frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
# gem "rails"
gem 'activerecord', :require => 'active_record'
gem 'pry'
gem 'pry-nav'
gem 'bcrypt'
gem 'rake'
gem 'require_all'
gem 'rack_session_access'
gem 'shotgun'
gem 'sinatra'
gem 'sinatra-activerecord', :require => 'sinatra/activerecord'
gem 'sqlite3'
gem 'thin'
gem 'tux'
【问题讨论】:
-
"这不会让我保存/保留我的数据" 你是怎么得出这个结论的?
schema.rb只是数据库模式在创建或上次迁移时的表示,它是通过从数据库中读取模式生成的。此文件的存在不会影响您写入数据库的能力。如果您收到特定错误,请发布该错误以及重现该错误的确切步骤。 -
Binding.pry。它创建记录(即 User.all.count == 1)。然后在重定向时删除记录(即强制::删除 repl 和 User.all.count ==0)。
-
太棒了。如果我删除此文件,它会保存/保留记录。当我运行迁移时,我会取回文件并在 repl (pry) 中强制::Cascade,并在重定向时删除记录。
-
您在 cmets 中所说的一切都没有多大意义。 schema.rb 的存在不会导致记录不持久。此外,这些不是重现的步骤。如果您有特定错误或意外结果,那么您必须在问题中发布确切步骤以重现它。您的示例中甚至没有任何
User.create或User.new.save代码! -
我已经要求您两次在您的问题中放置重现此错误所需的确切步骤和确切代码。您留下的 cmets 没有帮助。此外,您坚持认为问题在于 schema.rb 的存在,我告诉您这不是问题。这不是 schema.rb 如何工作或它存在的原因。我已投票决定将此问题作为离题结束,因为它不包含重现该问题所需的代码。请阅读:stackoverflow.com/help/minimal-reproducible-example
标签: ruby activerecord sinatra sinatra-activerecord