Rails 3包含自己的模型?

时间:2011-06-03 12:36:19

标签: ruby-on-rails ruby-on-rails-3 activerecord

我正在努力制作一个嵌套类型的对象模型,我很好奇我将如何使用Rails 3处理它。

基本上我有以下内容:

  • 断言
  • Expression_Group
  • 表达

断言由1-N Expression_Groups组成。 Expression_Groups由1-N表达式组成。对于我来说,使用ORM这是一个棘手的部分,也就是说,Expression_Groups也可能由其他Expression_Groups组成。

考虑SQL SELECT并说我们正在构建WHERE子句。

((V > 2 AND X = 0) OR (Y > 2 OR (Z = 4 OR S <> 2)))

当看到类似的东西时,我们可以将其分解并说:

 Z = 4 - Expression
(Z = 4 OR S <> 2) - Expression Group
(Y > 2 OR (Z = 4 OR S <> 2)) - Expression Group CONTAINING Expression AND Expression_Group

等等。我想做的是让用户能够构建该结构。我想使用Rails 3并以这样的方式构建我的模型,即我不需要自己动手处理器,只需按原样使用表单。

我知道如何为包含Expression_Groups的Expression_Groups设置每个关系EXCEPT。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

假设ExpressionGroup个对象之间存在潜在的一对多关系,这样的关联可能有效:

has_many :child_expression_groups,
         :class_name => "ExpressionGroup",
         :foreign_key => "parent_id",
         :dependent => :destroy

注意,这将需要在parent_id表中允许为空的新字段expression_groups,并且包含父ExpressionGroup的ID(如果有父项)

然后,您可以通过仅检索系统中parent_id设置为nil的那些(或者为此定义范围)来获取所有顶级表达式组ExpressionGroup模型)。

如果您需要更高级的处理(例如将其设为多对多等),请考虑使用Ancestry之类的内容。

答案 1 :(得分:0)