Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 多表继承,无法从子类访问列_Ruby On Rails_Ruby_Ruby On Rails 3_Multi Table Inheritance - Fatal编程技术网

Ruby on rails 多表继承,无法从子类访问列

Ruby on rails 多表继承,无法从子类访问列,ruby-on-rails,ruby,ruby-on-rails-3,multi-table-inheritance,Ruby On Rails,Ruby,Ruby On Rails 3,Multi Table Inheritance,更新: 将table_name更改为self.table_name=似乎说服了rails使用正确的表 然而,我现在发现了这些奇怪的错误 Mysql2::Error: Unknown column 'templates.deleted_at' in 'where clause': SELECT `objekts`.* FROM `objekts` WHERE (`templates`.`deleted_at` IS NULL) 原始问题: 我有一个模板和一个对象: class Templ

更新:
将table_name更改为self.table_name=似乎说服了rails使用正确的表

然而,我现在发现了这些奇怪的错误

   Mysql2::Error: Unknown column 'templates.deleted_at' in 'where clause': SELECT `objekts`.* FROM `objekts`  WHERE (`templates`.`deleted_at` IS NULL)
原始问题:

我有一个模板和一个对象:

class Template < ActiveRecord::Base
  def status; 0; end # Template doesn't have a status column, so define default
end

class Objekt < Template
  table_name = "objekts" # there is a status column in this table
end
类模板
但是当我在控制台中执行时,
Objekt.new.attributes
,它只列出
Template
对象中的属性,而不列出任何
Objekt

模板
上的每一列也可在
Objekt
中找到,但是
Objekt
有额外的10列(大部分是标志)


这是怎么回事?为什么rails不将
Objekt
类连接到
objekts
表?

参考上面的注释,当我提到组合而不是继承时,我正在考虑这样的事情

class Objekt < ActiveRecord::Base
  include Template

  def status
    self.random_column_name || super
  end
end

module Template
  def status
    0
  end
end
class-Objekt
参考上面的评论,当我提到组合而不是继承时,我想到了这样的事情

class Objekt < ActiveRecord::Base
  include Template

  def status
    self.random_column_name || super
  end
end

module Template
  def status
    0
  end
end
class-Objekt
一个
有很多/属于
的关系在这里不是比使用模板方法模式更好吗?在本例中,模板更像是一个
基本类
Objekt
应与表相关。约定优先于配置。好吧,模板有很多方法,Objekt也应该有。这就是为什么我认为继承是最好的例子。Mayble表继承根本不是正确的术语。我希望两个对象都有完全独立的表。。碰巧这些表共享一些列名。大多数情况下,我想在两者之间分享方法。模块不能工作,因为它会覆盖Objekt的列定义(或者会覆盖)。我更喜欢遵循
组合而不是继承的模式。您能否将这些方法从模板中移到一个模块中,并根据需要在Objekt中包含/扩展它们?然后它们都可以从
ActiveRecord::Base
继承
has\u many/allown\u to
关系是否比使用模板方法模式更好?在本例中,模板更像是一个
基本类
Objekt
应与表相关。约定优先于配置。好吧,模板有很多方法,Objekt也应该有。这就是为什么我认为继承是最好的例子。Mayble表继承根本不是正确的术语。我希望两个对象都有完全独立的表。。碰巧这些表共享一些列名。大多数情况下,我想在两者之间分享方法。模块不能工作,因为它会覆盖Objekt的列定义(或者会覆盖)。我更喜欢遵循
组合而不是继承的模式。您能否将这些方法从模板中移到一个模块中,并根据需要在Objekt中包含/扩展它们?然后它们都可以继承自
ActiveRecord::Base
。应该注意的是,如果status不是列名,那么这种方法是有效的。例如,因为我将random_column_name作为一个列,所以我只是在“Super class”中定义了它,而没有在模块中定义它。所以,我学到的是:模块可以用于两个活动记录模型之间的共享方法,这样这些方法就不是其中一个模型中的列了。感谢您的勾选:)应该注意的是,如果status不是列名,则此选项有效。例如,因为我将random_column_name作为一个列,所以我只是在“Super class”中定义了它,而没有在模块中定义它。所以,我学到的是:模块可以用于两个活动记录模型之间的共享方法,这样这些方法就不是其中一个模型中的列了。谢谢你的提示:)