gpt4 book ai didi

ruby-on-rails - SQLite3::SQLException:在“CONSTRAINT”附近:语法错误

转载 作者:行者123 更新时间:2023-12-03 18:51:38 33 4
gpt4 key购买 nike

您能帮我解决这个问题吗?首先,我创建一个迁移,该迁移生成三个表。然后我尝试执行一个SQL查询,但由于某种原因触发了错误
我是新手。我正在阅读第四版(4.0.6 Ruby On Rails)中的Rails指南。

class ExampleMigration < ActiveRecord::Migration
def up
create_table :categories do |t|

end


create_table :users do |t|
t.string :email
end


create_table :products do |t|
t.references :category
end

execute <<-SQL
ALTER TABLE products
ADD CONSTRAINT fk_products_categories
FOREIGN KEY (category_id)
REFERENCES categories(id)
SQL




add_column :users, :home_page_url, :string
rename_column :users, :email, :email_address
end

def down
# add a foreign key
execute <<-SQL
ALTER TABLE products
DROP FOREIGN KEY fk_products_categories
SQL

rename_column :users, :email_address, :email
remove_column :users, :home_page_url

drop_table :products
drop_table :users
drop_table :products
end


Ubuntu控制台

trabajo@fernando:~/estudio/MigrationsGuides$ rake db:drop
trabajo@fernando:~/estudio/MigrationsGuides$ rake db:migrate
== ExampleMigration: migrating ===============================================
-- create_table(:categories)
-> 0.0019s
-- create_table(:users)
-> 0.0012s
-- create_table(:products)
-> 0.0007s
-- execute(" ALTER TABLE products\n ADD CONSTRAINT fk_products_categories\n FOREIGN KEY (category_id)\n REFERENCES categories(id)\n")
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: near "CONSTRAINT": syntax error: ALTER TABLE products
ADD CONSTRAINT fk_products_categories
FOREIGN KEY (category_id)
REFERENCES categories(id)
/home/trabajo/.rvm/gems/ruby-2.0.0-p481@MigracionesGuides/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in `initialize'
/home/trabajo/.rvm/gems/ruby-2.0.0-p481@MigracionesGuides/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in `new'
/home/trabajo/.rvm/gems/ruby-2.0.0-p481@MigracionesGuides/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in `prepare'
/home/trabajo/.rvm/gems/ruby-2.0.0-p481@MigracionesGuides/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:134:in `execute'

最佳答案

fine SQLite manual


启用外键支持

为了在SQLite中使用外键约束,必须在未定义SQLITE_OMIT_FOREIGN_KEYSQLITE_OMIT_TRIGGER的情况下编译库。 [...]如果定义了OMIT_FOREIGN_KEY,则甚至无法解析外键定义(试图指定外键定义是语法错误)。


似乎您的SQLite是使用OMIT_FOREIGN_KEY定义的编译的。重新编译启用了FK和触发器的SQLite,或者(更好的是IMO)立即安装一个完全支持FK的适当数据库,然后切换到该数据库;或者我建议使用PostgreSQL,但MySQL应该这样做(如果您已经拥有的话)。

无论如何,请始终在要部署的数据库上进行开发;这甚至适用于您想玩的东西。无论您使用哪种数据库都会给您带来习惯,而这些习惯不会转移到其他数据库中。提供数据库可移植性的ORM只是一个神话,请不要迷恋它。

关于ruby-on-rails - SQLite3::SQLException:在“CONSTRAINT”附近:语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25069864/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com