退会済みユーザー2014/11/29 14:46 ありがとう御座います。 Category の階層構造を構築していく方法を確認させて頂きました。 すでに作っていました。私の認識が間違っていたようです。 特別なコードを書くのかと思っていました。。。 構築とは親子関係を意識してカテゴリを登録することだったんですね メンズという第一階層の一覧を表示する場合 def mens @category = Category.find_by(name: "メンズ") @items = @category.childs[1] end undefined method `each' forとエラーになってしまいます。 下記だとうまくいきますが、コードが長く複雑な気がします。。。 def mens @category = Category.find_by(name: "メンズ") items = [] items += @category.items @category.childs.each do |cat| items += cat.items end @items = items end 下記、github修正が必要です。 app / views / categories / parent → parent_idと修正 app / views / items / catgory → category
katoy2014/11/29 15:43次のようにしてみては如何でしょう。 helper に get_all_item を追加する。 def get_all_items(root) ans = root.items root.childs.each do |child| ans += get_all_items(child) end ans end そうすれば、mens は次のように書けるはずです。 def mens @category = Category.find_by(name: 'メンズ') @items = all_get_items(@category) end github の spec/sample.rb に get_all_items の定義と呼び出し例を追加してみました。 (github 中の間違いの指摘、ありがとうございます。 scafold した後、手動で migration を変更して spec/sample.rb が動作するように いろいろ手直しをしていたので view 側へ変更を反映していませんでした)
退会済みユーザー2014/11/29 17:46自分の環境で色々試してみているのですが get_all_itemがrails undefined methodになります。 調べたところヘルパーコントローラーに対して効かない ので includeするようにと書かれていたので下記のようにしましたがだめでした。 -------------------------------------------------------------------------------- class ApplicationController < ActionController::Base include get_all_item end -------------------------------------------------------------------------------- rspecについても勉強不足なので勉強します。 今まではseedで構築していました。。。 非常に感謝しています。ありがとうございます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2014/11/29 14:46
2014/11/29 15:43
退会済みユーザー
2014/11/29 17:46
退会済みユーザー
2014/11/30 06:52