Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails:嵌套的ActiveRecord类_Ruby On Rails 4_Rails Activerecord - Fatal编程技术网

Ruby on rails 4 Rails:嵌套的ActiveRecord类

Ruby 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:

在我的Rails应用程序中,我正在从文件系统HTML文件加载一些数据。但我希望一些ActiveRecord对象引用这些外部数据,并使用外键等将它们链接到db中,还因为我希望它们被传递到一个Ember.js应用程序中,而我不想在没有ID的情况下使用它

我的想法是创建一个嵌套的IdMapping类,它将从HTML加载的元素名映射到数据库中的持久id。每次加载具有相同名称的元素时,它都会通过映射从数据库接收正确的id

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