一张桌子 - 两个型号

时间:2013-08-19 14:08:18

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

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

我希望有两个模型,而不是一个模型和一些范围:Board用于根级元素(ancestry列值为nil)和{{1}其余的(Category列值为ancestry)。他们将使用相同的表not nil

我该怎么办?

2 个答案:

答案 0 :(得分:11)

您可以使用set_table_nameself.table_name明确定义模型表,具体取决于您的rails版本。您还可以使用default_scope为每个针对此模型的查询定义默认范围,因此两者的组合应该是您要搜索的内容:

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

答案 1 :(得分:5)

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

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

你应该能够与两种型号的电路板进行互动 - 表。

或者您只使用一个型号并为特定的东西添加两个模块。这取决于您的偏好。