我正在关注Rails Guide Getting Started with Engines。唯一不同的是我使用的是RubyMine IDE。我使用的是ruby 2.5.0和rails 5.1.5。
一切顺利,直到我达到第4部分,然后进入应用程序。"在进入应用程序之前,我想测试一切都很顺利。我尝试使用引擎视图和rails控制台创建一些文章和评论。我可以创作文章。但我无法创建评论。我收到错误:
SQLite3::SQLException: no such table: main.articles: INSERT INTO "blorgh_comments" ("article_id", "text", "created_at", "updated_at") VALUES (?, ?, ?, ?)
我在DB浏览器中为SQLite打开了test / dummy / db / development.sqlite3数据库,我确实有一个名为" blorgh_comments"的表。
我猜这个"没有这样的表"错误是某种"下游错误",即由于某些其他(未命名的)错误,rails无法访问该表。
我根据指南,嵌套资源,视图和部分设置了迁移。我检查了"特殊文件"在指南中提到它们都有所需的代码(我不需要改变任何东西)。
所以我想问题是,什么样的"底层"错误可能会触发此错误?
感谢任何帮助。
================编辑=================
引擎现在正在运行,我认为我知道原因:
指南告诉我用一个整数类型的article_id创建一个注释模型(显然是对父文章的引用),如下所示:
rails g Comment article_id:integer text:text
而不是这样做,我创建了这样的模型:
rails g Comment article:references text:text
我无法创建评论,如上面的问题中所述。当我"重构"应用程序并按照指南中的说明创建了迁移,它起作用了。
因此,我假设生成rails引擎的代码无法识别和/或正确处理 t.references 指令。具体来说,我怀疑它试图在变更方法(迁移)中而不是在它之后创建索引(就像在StackOverflow上的许多其他问题/类似性质的解决方案一样)。如果我是正确的,我认为这有资格作为rails引擎实现中的一个错误,但是,我不会这样报告,因为我没有足够的经验知道是否真的如此。
========================另一个编辑=====================
我发现@ Igor-Belo的这个StackOverflow answer说它是一个名称间距问题。我可以使用t.references指令但仍需要编辑迁移以正确设置外键索引。