"parent_id" belongs_to :parent, :c-6ren">
gpt4 book ai didi

mysql - 通过循环类创建 select_tag 的最佳方法

转载 作者:行者123 更新时间:2023-11-29 12:11:09 27 4
gpt4 key购买 nike

我有这样的场景:

class Category < ActiveRecord::Base

has_many :children, :class_name => "Category", :foreign_key => "parent_id"
belongs_to :parent, :class_name => "Category", :foreign_key => "parent_id"

def self.for_select
?? DO SOMETHING ??
end

end

我只需要为 select_tag 生成选项,如下所示:

Category 1
- Subcategory 1
- Subcategory 2
- Subcategory 3
Category 2
- Subcategory 4
- Subcategory 5

如何在不使用循环查询对数据库造成压力的情况下执行此操作?

实际上,我有类似的东西,但它执行了太多查询:

def self.for_select
ret = []
Category.where(parent_id: nil).each do |m|
ret << [m.name, m.id]
m.children.each { |c| ret << ["- #{c.name}", c.id] }
end
return ret
end

最佳答案

目前尚不清楚您希望在选择选项中显示什么内容。在这里,我假设“类别”是所有没有父类别的类别,子类别是这些类别的直接子类别。

在您的类别中

#class methods section
class << self

def select_options
top_level_categories = Category.where(:parent_id => nil).includes(:children)
top_level_categories.collect{|category| [[category.name, category.id]] + category.children.collect{|category| [" - #{category.name}, category.id]}}
end

应该返回

[["Category 1", 321], [" - Subcategory 1", 123], [" - Subcategory 2", 456]...etc]

那么,在你看来,做<​​/p>

select_tag "foo", options_for_select(Category.select_options)    

关于mysql - 通过循环类创建 select_tag 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30666506/

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