我对Rails并不陌生,并且对如何将子类别成功添加到现有的Join Table关系中存在疑问。

例如,假设我正在构建工作板。每个作业都有5个主要的过滤器类别(Job_Type [General Management, Finance & Operations, etc.]Industry [ Technology, Healthcare, etc.]Region [Northwest, Southeast, etc.]等)。我希望每个人也都有子类别(例如,此职位发布有Region > Southeast > South Carolina > Greenville)。

为5种主要过滤器类型设置初始的Join Table关联对于将来的过滤和可搜索性很有意义。

编辑

这是我当前的Posting模型

class Posting < ActiveRecord::Base
  mount_uploader :avatar, AvatarUploader

  belongs_to :recruiter, class_name: "User"
  belongs_to :company
  has_many :interests
  has_many :comments, as: :commentable
  has_and_belongs_to_many :job_types
  has_and_belongs_to_many :industries
  has_and_belongs_to_many :regions
  has_and_belongs_to_many :market_caps
  has_and_belongs_to_many :ownerships
  has_many :users, through: :interests
  acts_as_followable
end


我目前在ActiveRecord上直接使用联接表而不是数组,以提高速度并稍后进行过滤/搜索功能。它还使我可以将这些联接表与大量其他必要的ActiveRecord关联一起使用。

以下是job_type的摘要:

class JobType < ActiveRecord::Base
  has_and_belongs_to_many :postings
  has_and_belongs_to_many :news_items
  has_and_belongs_to_many :companies
  has_and_belongs_to_many :users
  has_and_belongs_to_many :mkt_ints
end


这使我可以访问一个简单的关联模型数组,但是我对如何将其移到具有潜在的进一步嵌套数组的数组感到困惑。为第一个联接表添加其他联接表感觉很麻烦。我敢肯定有更好的解决方案,并且希望获得您可能拥有的任何见解。

第二编辑

这是我要尝试做的有代表性的图片。

ruby-on-rails - 连接表中的嵌套关​​系-Rails-LMLPHP

谢谢!

最佳答案

解决了



该表的数据很可能不会更改,这会降低复杂性并提供更直接的解决方案。

我在单个表中创建了单独的角色,以限制查询和联接表。生成的Region ActiveRecord如下所示:

class CreateRegions < ActiveRecord::Migration
  def change
    create_table :regions do |t|
      t.string :role # role [ region, state, city ]
      t.integer :parent # equal to an integer [ state.id = city.parent ] or null [ region has no parent ]
      t.string :name # [ ex: Southeast, South Carolina, Charleston ]
      t.timestamps null: false
    end
  end

end


这为我提供了在单个表中创建关系并使用parent.id轻松将其分类到嵌套复选框中所需的所有字段。

感谢所有查看此问题的人,并感谢Val Asensio对您的有益评论和鼓励。

关于ruby-on-rails - 连接表中的嵌套关​​系-Rails,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33084725/

10-12 18:25