お疲れ様です。
現在共同開発でアプリを作成することになり、自分はRails
側を担当することになりました。
Railsでツリー構造を実装したいと思いキータで記事を探したところ、次のような記事が見つかりデータベースのテーブルが一緒だったので参考にすることにしました。
Railsでツリー構造(階層構造)をもったカテゴリを隣接リストモデルで実装する
ただ、実装するコードの意味が全くと言っていいほど分かりません。
一応自分なりにコードの意味を調べてみたのですが、よく分からないので意味を教えてほしいです。
2. Categoryモデルの実装
class Category < ApplicationRecord belongs_to :parent, class_name: 'Category', foreign_key: :parent_id has_many :children, class_name: 'Category', foreign_key: :parent_id *カテゴリーについて、そのカテゴリーから見て1(親)の関係であれば`belongs_to`、多(子)であれば`has_many`を指定する。 def ancestors(category = self, result = [], include_self: true, only_id: true) return result + [only_id ? category.id : category] if category.root? ancestors(category.parent, result, only_id: only_id) + (!include_self && id == category.id ? [] : [only_id ? category.id : category]) end *ancestors(祖先)メソッド。include_selfは自分自身を含むという意味?only_idは一つしかIDがない場合という意味? もし自分自身がカテゴリーの先祖だったら、配列にIDとカテゴリー名を加える? def descendants(category = self, array = [], include_self: true, only_id: true) array << (only_id ? self.id : self) if include_self && id == category.id return array + [only_id ? category.id : category] if category.children.blank? category.children.eager_load(:children).each do |cat| array << (only_id ? cat.id : cat) descendants(cat, array) end array end *descendants(子孫)メソッド。include_selfは自分自身を含むという意味?only_idは一つしかIDがない場合という意味? もしカテゴリー自身を含み、IDがカテゴリーIDと一緒ならば、配列に加える? もしカテゴリーの子供が空であれば、配列とカテゴリーを返す? end
調べたのは上記のとおりで、まだまだ分からない点が複数ありますのでご教授お願いします。
このコードはそう難しいものではないです。なのになぜ回答がつかないかというと、nakatieventさんの知識レベルによってはベストアンサー3,4個分の長い戦いになりそうで手控ているのでしょう。
再帰 という概念はご存知ですか? それがベースなのでそれがわかっていらしたら回答します。わかっていなかったらまずそれを検索するなどして理解してください。
なるほどです。
再帰についてよく分からなかったので、下記の記事を参考に再帰の概念を理解しました。
https://qiita.com/drken/items/23a4f604fa3f505dd5ad#1-%E5%86%8D%E5%B8%B0%E9%96%A2%E6%95%B0%E3%81%A8%E3%81%AF
上記の記事を踏まえたうえで、ご教授お願いします????
回答1件
あなたの回答
tips
プレビュー