gpt4 book ai didi

ruby-on-rails - ruby rails : Finding all topics in a certain category?

转载 作者:数据小太阳 更新时间:2023-10-29 08:25:31 24 4
gpt4 key购买 nike

我试图在一个特定类别中查找所有主题,但我不确定这是否是最有效的方法:

Topic.all.select { |topic| topic.categories.include?(category) }

以上对我有用,但似乎 MySQL 需要很长时间才能找到记录。有什么更有效的吗?

最佳答案

当您需要多对多关系时,听起来您现在在主题和类别之间有一个 has_many 关系。像这样重构你的模型:

# app/models/category.rb
class Category < ActiveRecord::Base
has_and_belongs_to_many :topics
end

# app/models/topic.rb
class Topic < ActiveRecord::Base
has_and_belongs_to_many :categories
end

然后创建一个没有主键的连接表。像这样创建新的迁移:

script/generate migration AddCategoriesTopicsJoinTable

并添加这些内容:

class AddCategoriesTopicsJoinTable < ActiveRecord::Migration
def self.up
create_table :categories_topics, :id => false do |t|
t.integer :category_id
t.integer :topic_id
end
end

def self.down
drop_table :categories_topics
end
end

请注意,连接表是通过按字母顺序组合两个表名来命名的。这就是 Rails 知道如何自动找到它的方式。

现在您可以调用 @category.topics 并获取一组主题,您可以调用 @topic.categories 并获取类别。它在两个方向上都有效。

更新:关于 Rails 中多对多关系的问题经常出现,以至于我写了一篇名为 basic many-to-many associations 的文章解释如何使用 habtmhas_many :through,以及它们之间的区别。

关于ruby-on-rails - ruby rails : Finding all topics in a certain category?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2163637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com