【发布时间】:2015-01-25 23:05:56
【问题描述】:
编辑:对不起,我忘了提到我使用的是 Mongoid,那些 field 是 Mongoid 的
我有一个 Rails 应用程序,负责生成 Word 文档(并替换其中的一些变量)
所以我有许多DocumentEtude::xxxx 类超类基类DocumentEtude 类(英文ProjectDocument)
class DocumentEtude
include Mongoid::Document
field :shared_field
class DocumentEtude:xxxx < DocumentEtude
field :only_in_xxxx_field
为了保持理智,我想将所有变量放在一个地方,然后执行类似的操作
class DocumentEtude
...
def variables
vars = {}
case _type
when 'DocumentEtude::xxxxx', 'DocumentEtude::yyyyyy', 'DocumentEtude::zzzzzz'
vars.merge!({
"some_var" => shared_field,
"some_var2" => only_in_xxxx_field
...
end
def generate_document
# Code that uses the variables defined before
end
现在的问题是我在 DocumentEtude 中声明了这个方法,但是
我需要访问一些仅在子类中声明的字段(例如only_in_xxxx_field),但显然 Ruby 无法找到它们。知道我该怎么做吗?
【问题讨论】:
-
你能举例说明你想如何访问它们吗?
-
我重新编辑了我的问题。例如,我可能有一个
DocumentEtude::Bill,其中我有额外的字段price、tax等。我想将这些变量放在一个哈希中(然后用于替换我的 word 文档的 xml 中的内容) -
fields类方法或attributes实例方法有问题吗?您不能从这些开始并过滤掉通常的嫌疑人吗? -
bang bang ...是我的头撞在墙上的声音,因为我犯了这样一个愚蠢的错误。我意识到我只做了一个
case when并将相同的文档类型放入多个when。所以很明显,只有第一个会被执行,只合并一小部分实际变量,给我的印象是有些东西不能正常工作...... -
查看我的上一条评论...这确实是一个愚蠢的错误,并不能使它成为一个真正的问题。
标签: ruby-on-rails ruby inheritance mongoid