2017-10-23 1 views
-1

これは、モデルに関連する2つのテーブルカテゴリ(id、name)とサブカテゴリ(id、name、category_id)を持っているからです。私はinverse_ofを以下のように設定します。 私の質問は、PHPで1年前に "カテゴリ"テーブルを持っていて、id、name、parent_id(デフォルトでは0)を持っていましたが、そのテーブルを使ってナビゲーション、ブレッドクラム、および他のナビゲーション要素を含む。Rails5カテゴリーと同じテーブル上の親カテゴリID

class CreateCategories < ActiveRecord::Migration[5.1] 
    def change 
    create_table :categories do |t| 
     t.string :name 

     t.timestamps 
    end 
    end 
end 

class CreateSubCategories < ActiveRecord::Migration[5.1] 
    def change 
    create_table :sub_categories do |t| 
     t.string :name 
     t.integer :category_id 
     t.timestamps 
    end 
    end 
end 

class Category < ApplicationRecord 
    has_many :sub_categories, inverse_of: :category 
end 
class SubCategory < ApplicationRecord 
    belongs_to :categories, inverse_of: :sub_category 
end 

私は4年以上にわたって、今はRuby on Railsでプログラミングされていると私はこれを達成するために本当の素敵な「Rubyway」を見つけるためには至っていません。何年もの間、私は既に2テーブルメソッドで使用しているものを使用した例を見てきましたが、システムが多くのカテゴリと100のようなサブカテゴリを取得すると処理に影響を与えるため、これは直感的ではありません。私はいつも持っていた問題は、モデルとどのレコードが同じテーブル上のレコードに属することができることを実現するためにシステムを取得することです誰もがuseingあるか

class CreateCategories < ActiveRecord::Migration[5.1] def change 
    create_table :categories do |t| 
     t.string :name 
     t.integer :parent_id 
     t.timestamps 
    end 
    end 
end 

のような1つのテーブルの方法を知っています。私は手動で達成することができましたが、レール管理のようなformtasticやその他の宝石がうまくいく場所を設定する方法は見つけられていません。

+0

ダウン投票の理由は何ですか?下位票には理由が含まれるべきです。 –

答えて

1

あなたはツリー構造を探しているようです。 acts_as_treeがしばらくありました。 PostgreSQLを使用している場合は、ltreeの拡張子(pg_ltree gemと一緒に)も関心があります。

+0

イエスタの木構造は、私がいつも遭遇してきたものですが、依然として問題をきれいに解決しません。 IMOは、比較的単純なはずの複雑な解決策にすぎません。私は、レコードをループし、配列を構築し、親IDに基づいて整理し、必要に応じて入れ子にすることを検討しています。 PHPやその他のWeb言語では、結果を出力するためにネストループ3を実行するだけですが、rubyではactiverecordではそれほど単純ではないようです。 –

+0

私がRubyについて知っていることを知っていると、これをプログラム的にアプローチするよりエレガントな方法があるはずです。 –

+0

もしあなたがPostgreSQLを使用しているなら、これは実際にはあまりにも悪い解決策ではありませんが、MySQLは何もしません。しかし、私はこれを解決すると、私は何年もかけて多くの質問をしてきた質問であり、その時は実行可能な答えがあると思うので、答えを投稿するつもりです。 –

関連する問題