gpt4 book ai didi

ruby-on-rails - Rails - 如何通过模型有很多关联来订购模型?

转载 作者:行者123 更新时间:2023-12-04 17:37:30 24 4
gpt4 key购买 nike

我有两个模型:

#Product
class Product < ActiveRecord::Base
has_and_belongs_to_many :categories
attr_accessible :name
...
end

#Category
class Category < ActiveRecord::Base
has_and_belongs_to_many :products, :order => "name ASC"

attr_accessible :name, :priority
end

我想按优先级最高的类别然后按产品名称订购我的产品

例如我有:
3类:
  • 糖果,优先级 = 3
  • 水果,优先级 = 1
  • 甜点,优先级 = 2

  • 3个产品:
  • 巧克力冰淇淋,有甜品和甜品类,
  • cookies ,有甜品和甜品类,
  • Kiwi,有糖果、水果和甜品类

  • 我希望他们能像这样订购:
  • 猕猴桃(首先是因为水果是最高优先级)
  • 巧克力冰淇淋(第二个是因为巧克力在 cookies 之前,而且它们都有相同的优先级)
  • cookies

  • 我如何在 Rails 中做到这一点?
    我不希望我的产品被复制,我知道这样做很容易:
    Category.order("priority ASC").each do |cat|
    cat.products.order("name ASC").each do |product|
    end
    end

    但在这种情况下,Kiwi、Chocolate Ice Cream 和 Cookies 将被复制,因为它们都有多个类别。
    有没有简单的方法来删除重复项?或者有没有办法直接按类别最高优先级订购产品?

    编辑:有关我想要实现的目标的更多详细信息

    事实上,我想要的是一个巨大的表格,在左侧,我将所有产品(每个独特产品只有一行)按类别排序......这样我就可以拥有这样的东西:
  • 分类 - 产品
  • 水果 - 香蕉
  • 水果 - 苹果
  • 水果-猕猴桃
  • 甜点 - 巧克力冰淇淋
  • 甜点 - cookies
  • Sweet - 巧克力糖
  • Sweet - 苹果糖
  • ...

  • 看?即使水果是甜点和甜食,我也希望它在这张 table 上只出现一次。而且我希望产品出现在它们的“最重要”类别中(这就是我考虑“优先级”的原因)。

    由于这个巨大的表格将用于编辑产品,我希望能够轻松访问产品的属性(每个属性有一列)。所以我真的需要尽可能减少数据库请求。

    感谢任何可能帮助我的人!
    库尔加

    最佳答案

    为了避免重复,你可以试试这个,

    Product.joins(:categories).group("products.name").order("categories.priority ASC, products.name ASC")

    关于ruby-on-rails - Rails - 如何通过模型有很多关联来订购模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13928975/

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