我正在努力制作一个嵌套类型的对象模型,我很好奇我将如何使用Rails 3处理它。
基本上我有以下内容:
断言由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。
有什么想法吗?
答案 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)
您考虑过has_and_belongs_to_many
了吗? http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html