Rails 4 ActiveRecord 有很多通过关系不能从 sql 文件读取

Posted

技术标签:

【中文标题】Rails 4 ActiveRecord 有很多通过关系不能从 sql 文件读取【英文标题】:Rails 4 ActiveRecord has many through relationship not working from sql file read 【发布时间】:2016-04-18 23:39:54 【问题描述】:

我目前正在从事一个项目,我必须从现有的 .sql 文件中填充 postgresql 数据库,然后使用 ActiveRecord::Base.connection.execute(IO.read("path/to/file.sql")) 为数据库播种

这会创建许多表和连接表,它们没有关联的迁移。

当我创建与数据库一起使用的 ActiveRecord 模型时,一切顺利,直到我尝试通过几个(预先存在的)连接表建立关系。 示例:

class Store < ActiveRecord::Base
   has_many :stores_teas
   has_many :teas, through: :stores_teas
end

class Tea < ActiveRecord::Base
  has_many :stores_teas
  has_many :stores, through: :stores_teas
end

class StoresTeas < ActiveRecord::Base
  belongs_to :store
  belongs_to :tea
end

当我尝试拨打 store.teas 之类的电话时,我收到一个错误:

NameError: uninitialized constant Store::StoresTea
from .../.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.3/lib/active_record/inheritance.rb:158:in `compute_type'

我之前在其他项目中多次设置过这样的关系,但我总是通过 rails 迁移创建表,而不是从同样创建表的 sql 文件中加载。我还需要做什么来映射关系?

【问题讨论】:

app/models中有嵌套文件夹吗?这些类的表中是否有一个名为 type 的列? 除了生成的concerns文件夹之外,没有。 没有“类型”列? 不,任何表格中都没有类型列 【参考方案1】:

您对 foreign_keys 和 ActiveRecord 关联感到困惑。

class StoresTeas < ActiveRecord::Base
  belongs_to :store
  belongs_to :tea
end

【讨论】:

谢谢,为此...抱歉,这是一个错字。我会在问题中更改它。

以上是关于Rails 4 ActiveRecord 有很多通过关系不能从 sql 文件读取的主要内容,如果未能解决你的问题,请参考以下文章

禁用 Rails 4 的 ActiveRecord

Rails ActiveRecord关系无效外键错误

Rails 4,ActiveRecord,查找当前用户未评论的所有帖子

markdown 禁用ActiveRecord for Rails 4,5

Rails 6.1.4 中的 ActiveRecord 枚举行为更改

ActiveRecord / Rails 3 中的日期格式