我有一个Category和Subcategory模型。类别有许多子类别,子类别属于类别。每个子类别当前都有一个位置字段,用于跟踪它所属的类别下的排队位置。
我这样做的问题是每个我需要:position
字段对每个类别都是唯一的。因此,我不需要在我的子类别模型中使用validates_uniqueness_of :position
,而是需要一种方法来检查位置字段是否对其特定类别是唯一的。任何人有任何想法,或者可能之前处理过这个问题吗?
答案 0 :(得分:1)
使用NestedSet进行类别/子类别处理,使用ActsAsList进行排名处理。
答案 1 :(得分:1)
我相信这会根据用户ID验证名称的唯一性(即名称是每用户唯一的):
class Report < ActiveRecord::Base
validates_uniqueness_of :name, :scope => [:user_id]
end
has_many
和belongs_to
之间的简单关联可能适合您。如果position是一个整数,您可以在控制器中{@ 1}}执行或不使用该位置的唯一性。
答案 2 :(得分:1)
扩展lucapettes回答,
嵌套集(https://github.com/skyeagle/nested_set)是这样的:
- category
+- category
+- category
+--- category
+- category
- category
+- category
+- category
+--- category
+- category
您可以在任何地方向集合中添加节点,并将产品与任何类别相关联。
在此文件中查看方法https://github.com/skyeagle/nested_set/blob/master/lib/nested_set/base.rb
awsome_nested_set的wiki可能有更好的文档,https://github.com/collectiveidea/awesome_nested_set/wiki/Awesome-nested-set-cheat-sheet
例如,你可以向左移动一个项目(例如,在这样的列表中)category.move_left
要了解此模型及其工作原理,请阅读 Trees in SQL by Joe Celko