10

我有模型的层次结构Board(使用祖先 gem 实现)。

而不是一个模型和一些范围,我想有两个模型:Board用于根级元素(ancestry列值是nil),Category其余的(ancestry列值是not nil)。他们将使用同一张桌子boards

我怎么能做这样的事情?

4

2 回答 2

12

set_table_name您可以使用或self.table_name根据您的 rails 版本明确定义模型的表。您还可以使用 为为此模型进行的每个查询定义默认范围default_scope,因此两者的组合应该是您要搜索的内容:

class Category < AR:Base
  self.table_name = 'boards'
  default_scope where('boards.ancestry IS NOT NULL')
end
于 2013-08-19T14:21:38.247 回答
6

您可以指定类别模型的表名并生成默认范围:

class Category < ActiveRecord::Base
  self.table_name = "boards"
  default_scope where('boards.ancestry IS NOT NULL')
end

您应该能够通过板表与这两个模型进行交互。

或者你保留一个模型并为特定的东西添加两个模块。这取决于您的喜好。

于 2013-08-19T14:21:58.623 回答