Ruby on rails 4 Rails:嵌套的ActiveRecord类
在我的Rails应用程序中,我正在从文件系统HTML文件加载一些数据。但我希望一些ActiveRecord对象引用这些外部数据,并使用外键等将它们链接到db中,还因为我希望它们被传递到一个Ember.js应用程序中,而我不想在没有ID的情况下使用它 我的想法是创建一个嵌套的IdMapping类,它将从HTML加载的元素名映射到数据库中的持久id。每次加载具有相同名称的元素时,它都会通过映射从数据库接收正确的idRuby on rails 4 Rails:嵌套的ActiveRecord类,ruby-on-rails-4,rails-activerecord,Ruby On Rails 4,Rails Activerecord,在我的Rails应用程序中,我正在从文件系统HTML文件加载一些数据。但我希望一些ActiveRecord对象引用这些外部数据,并使用外键等将它们链接到db中,还因为我希望它们被传递到一个Ember.js应用程序中,而我不想在没有ID的情况下使用它 我的想法是创建一个嵌套的IdMapping类,它将从HTML加载的元素名映射到数据库中的持久id。每次加载具有相同名称的元素时,它都会通过映射从数据库接收正确的id class SheetTemplate include ActiveModel:
class SheetTemplate
include ActiveModel::Model
class IdMapping < ActiveRecord::Base
self.table_name = 'sheet_template_id_mappings'
has_one :game_system
validates :game_system, presence: true
validates :name, presence: true, uniqueness: { scope: :game_system }
end
attr_accessor :name, :author, :game_system, :boxes
end
但储蓄并不能:
[4] pry(main)> n.name = 'Foobar'
"Foobar"
[5] pry(main)> n.save
(0.4ms) BEGIN
SheetTemplate::IdMapping Exists (0.7ms) SELECT 1 AS one FROM "sheet_template_id_mappings" WHERE ("sheet_template_id_mappings"."name" = 'Foobar' AND "sheet_template_id_mappings"."game_system_id" = 1) LIMIT 1
(0.3ms) ROLLBACK
false
在这里,我可能应该提到表是空的,因此IdMapping不可能存在——我甚至使用dbconsole进行了双重检查
欢迎提出任何建议和想法!: 看看你的模型,你的IdMapping模型中有一个游戏系统,所以在你的IdMapping模型中有geme系统id是不合适和错误的
相反,您应该在GameSystem模型中使用id\u mapping\u id。这应该可以解决错误。为什么在id映射模型中使用game\u system\u id?您与game\u系统有一个关系,所以GameSystem模型应该使用id\u mapping\u id。好问题:D不确定我为什么更改它,现在它如预期的那样工作了——这应该教会我在疲劳时上床睡觉:嗯,我会把它作为一个答案发布。谢谢,把它改成原来的归属。另外,在熟睡之后,我正在考虑将整个模板处理移到应用程序的Javascript部分。@ma_il很乐意帮助:
[3] pry(main)> n.game_system_id = gs.id
1
[4] pry(main)> n.name = 'Foobar'
"Foobar"
[5] pry(main)> n.save
(0.4ms) BEGIN
SheetTemplate::IdMapping Exists (0.7ms) SELECT 1 AS one FROM "sheet_template_id_mappings" WHERE ("sheet_template_id_mappings"."name" = 'Foobar' AND "sheet_template_id_mappings"."game_system_id" = 1) LIMIT 1
(0.3ms) ROLLBACK
false