【问题标题】:Nested relationships within Join Tables - Rails连接表中的嵌套关​​系 - Rails
【发布时间】:2015-10-12 15:23:21
【问题描述】:

我对 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

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

第二次编辑

如果有帮助,这是我正在尝试做的事情的代表性图片。

谢谢!

【问题讨论】:

  • 只是一个友好的提示,如果您尝试自己创建这些模型关系然后发布代码以获得评论和帮助,您可能会获得更多帮助。
  • 感谢@ValAsensio。我感谢反馈,我理解这一点。我将继续对其进行一些研究,一旦我有我认为值得发布的东西,我就会发布代码。我不想浪费更多不必要的时间。 =]
  • 我以为有人会加入。“加入 5 种主要过滤器类型的表关联”这是非标准 Rails 语言,也与数据库 SQL 无关,所以也许这让回答者望而却步。我希望有人能提供帮助,但可能不会发生;这就是 Stack Overflow 上的生活。我自己有几个未回答的问题。每个人都这样做,所以不要为此灰心。

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


【解决方案1】:

已解决


此表的数据很可能不会发生变化,这会降低复杂性并提供更直接的解决方案。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多