联接表中的嵌套关系 - Rails
Nested relationships within Join Tables - Rails
我是 Rails 的新手,对如何成功地将子类别添加到现有的加入 Table 关系有疑问。
例如,假设我正在构建一个职位公告板。每个职位都有 5 个主要过滤器类别(Job_Type [General Management, Finance & Operations, etc.]
、Industry [ Technology, Healthcare, etc.]
、Region [Northwest, Southeast, etc.]
等)。我希望每个人都有子类别(例如,这份工作 post 有一个 Region > Southeast > South Carolina > Greenville
)。
为 5 种主要过滤器类型设置初始加入 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
我目前正在使用 join tables 而不是直接在 ActiveRecord 上使用数组,以提高速度和稍后的 filtering/searching 功能。它还允许我将这些连接 table 与大量其他必要的 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
这使我可以访问一个简单的关联模型数组,但我对如何将其转移到具有潜在的进一步嵌套数组的数组数组感到困惑。为第一个连接 table 添加额外的连接 table 感觉很笨拙。我相信有更好的解决方案,并且很乐意获得您可能拥有的任何见解。
第二次编辑
如果有帮助,这是我正在尝试做的代表性图片。
谢谢!
已解决
此 table 的数据很可能不会更改,这会降低复杂性并提供更直接的解决方案。
我在单个 table 中创建了不同的角色来限制查询和加入 table。生成的 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
这为我提供了在单个 table 中创建关系所需的所有字段,并使用 parent.id
轻松地将其分类到嵌套的复选框中。
感谢所有查看此问题的人,并感谢 Val Asensio 的有益评论和鼓励。
我是 Rails 的新手,对如何成功地将子类别添加到现有的加入 Table 关系有疑问。
例如,假设我正在构建一个职位公告板。每个职位都有 5 个主要过滤器类别(Job_Type [General Management, Finance & Operations, etc.]
、Industry [ Technology, Healthcare, etc.]
、Region [Northwest, Southeast, etc.]
等)。我希望每个人都有子类别(例如,这份工作 post 有一个 Region > Southeast > South Carolina > Greenville
)。
为 5 种主要过滤器类型设置初始加入 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
我目前正在使用 join tables 而不是直接在 ActiveRecord 上使用数组,以提高速度和稍后的 filtering/searching 功能。它还允许我将这些连接 table 与大量其他必要的 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
这使我可以访问一个简单的关联模型数组,但我对如何将其转移到具有潜在的进一步嵌套数组的数组数组感到困惑。为第一个连接 table 添加额外的连接 table 感觉很笨拙。我相信有更好的解决方案,并且很乐意获得您可能拥有的任何见解。
第二次编辑
如果有帮助,这是我正在尝试做的代表性图片。
谢谢!
已解决
此 table 的数据很可能不会更改,这会降低复杂性并提供更直接的解决方案。
我在单个 table 中创建了不同的角色来限制查询和加入 table。生成的 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
这为我提供了在单个 table 中创建关系所需的所有字段,并使用 parent.id
轻松地将其分类到嵌套的复选框中。
感谢所有查看此问题的人,并感谢 Val Asensio 的有益评论和鼓励。