モデルの階層構造がありますBoard
(祖先の宝石を使用して実装されています)。
1 つのモデルといくつかのスコープの代わりに、Board
ルート レベル要素 ( ancestry
column value is nil
) とCategory
残り ( ancestry
column value is not nil
) の 2 つのモデルが必要です。彼らは同じテーブルを使用していますboards
。
どうすればこのようなことができますか?
モデルの階層構造がありますBoard
(祖先の宝石を使用して実装されています)。
1 つのモデルといくつかのスコープの代わりに、Board
ルート レベル要素 ( ancestry
column value is nil
) とCategory
残り ( ancestry
column value is not nil
) の 2 つのモデルが必要です。彼らは同じテーブルを使用していますboards
。
どうすればこのようなことができますか?
set_table_name
Rails のバージョンを使用して、またはそれself.table_name
に応じて、モデルのテーブルを明示的に定義できます。また、 を使用して、このモデルに対して作成されたすべてのクエリのデフォルト スコープを定義することもできますdefault_scope
。そのため、両方の組み合わせが検索対象になるはずです。
class Category < AR:Base
self.table_name = 'boards'
default_scope where('boards.ancestry IS NOT NULL')
end
カテゴリ モデルのテーブル名を指定して、デフォルトのスコープを生成できます。
class Category < ActiveRecord::Base
self.table_name = "boards"
default_scope where('boards.ancestry IS NOT NULL')
end
また、boards-Table を使用して両方のモデルと対話できる必要があります。
または、1 つのモデルにとどまり、特定のもののために 2 つのモジュールを追加します。それはあなたの好みに依存します。