Rails5类别与父类别ID在同一个表上

时间:2017-10-23 18:34:37

标签: ruby-on-rails activerecord model ruby-on-rails-5

好的,我一直在为类别做的是我有2个表格类别(id,name)和SubCategories(id,name,category_id)通过模型相关。我设置了inverse_of,如下所示。 我的问题是,当我几年前在PHP中使用代码时,我们使用一个表“Categories”并且它有id,name,parent_id(默认为0)然后我们使用那个表来控制导航,面包屑和输出的输出其他导航元素。

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

我已经在Ruby on Rails中编程了4年多了,我还没有找到一个真正好的“Rubyway”来实现这一目标。多年来,我已经看到了使用2表方法已经使用的示例,但是这似乎不太直观,因为当系统获得许多类别和子类别(如100)时,页面加载时间将受到影响。是否有人使用或知道像

这样的表格方法
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

我一直遇到的问题是模型以及如何让系统意识到记录可以属于同一个表上的记录。我已经能够手动实现它,但我还没有找到一种方法来设置它与formtastic和其他宝石像rails管理员会很好用它。

1 个答案:

答案 0 :(得分:1)

似乎您正在寻找树形结构。 acts_as_tree已经存在了一段时间。如果您正在使用PostgreSQL,ltree扩展名也可能会受到关注(以及pg_ltree gem)。