连接表中的嵌套关​​系 - Rails

时间:2015-10-12 15:23:21

标签: ruby-on-rails ruby-on-rails-4 nested polymorphic-associations

我对Rails很新,并对如何成功将子类别添加到现有的连接表关系提出疑问。

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

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

修改

这是我当前的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

这允许我访问一个简单的关联模型数组,但我对如何将其移动到具有潜在的嵌套数组的数组数组感到困惑。为第一个连接表添加额外的连接表感觉很笨拙。我确信这是一个更好的解决方案,并希望得到你可能有的任何见解。

第二次编辑

这是一个代表性的图片,说明如果有帮助我想做什么。

enter image description here

谢谢!

1 个答案:

答案 0 :(得分:0)

<强>解决

此表的数据很可能不会改变,这可以减轻复杂性并提供更直接的解决方案。

我在单个表中创建了单独的角色来限制查询和连接表。生成的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提供的有用评论和鼓励。