2013-08-19 26 views
7

モデルBoard(祖先宝石を使用して実装されています)の階層構造を持っています。ルートレベルの要素(ancestry列の値がnilある)についてBoard、残り(ancestry列の値がnot nilである)のためのCategory1つのテーブル - 2つのモデル

代わりの一つのモデルといくつかのスコープが、私は2つのモデルを持っているしたいと思い

。彼らは同じテーブル boardsを使用しています。

どうすればいいですか?

答えて

10

レールのバージョンによっては、set_table_nameまたはself.table_nameを使用してモデルの表を明示的に定義できます。また、あなたはdefault_scopeを使用して、このモデルのために作られたすべてのクエリのデフォルトのスコープを定義することができ、その両方の組み合わせは、あなたが探しているものでなければなりません:

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

あなたは、カテゴリモデルのテーブル名を指定して生成することができデフォルトのスコープ:

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

そして、あなたは、両方のモデルは、ボード・テーブルをウィットと対話することができるはずです。

1つのモデルにとどまり、特定のもの用に2つのモジュールを追加します。それはあなたの好みによって異なります。

+1

うわー、まったく同じ答え、ハハハ、面白かったです。 – MurifoX

関連する問題