加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:36:33 所属栏目:百科 来源:网络整理
导读:我有两个型号: #Productclass Product ActiveRecord::Base has_and_belongs_to_many :categories attr_accessible :name ...end#Categoryclass Category ActiveRecord::Base has_and_belongs_to_many :products,:order = "name ASC" attr_accessible :name,
我有两个型号:

#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件商品:

>巧克力冰淇淋,有甜点和糖果类别,
>饼干,
>猕猴桃,有甜食,水果和甜点类

而且我希望他们这样订购:

>猕猴桃(首先因为水果是最优先的)
>巧克力冰淇淋(第二个因为巧克力来自饼干,它们都有相同优先级的类别)
>饼干

我怎么能在Rails中这样做?
我不希望我的产品被复制,我知道这样做很容易:

Category.order("priority ASC").each do |cat|
  cat.products.order("name ASC").each do |product|
  end
end

但在这种情况下,新西兰,巧克力冰淇淋和饼干将被复制,因为它们都有几个类别.
有没有一种简单的方法来删除重复?或者有没有办法直接按类别优先顺序订购产品?

编辑:有关我想要实现的更多细节

事实上,我想要的是一张巨大的桌子,在左边,我有所有产品(每个独特产品只有一行)按类别排序……所以我可以有这样的东西:

>类别 – 产品
>水果 – 香蕉
>水果 – 苹果
>水果 – 猕猴桃
>甜点 – 巧克力冰淇淋
>甜点 – 饼干
>甜 – 巧克力糖
>甜蜜 – 苹果糖果
> ……

看到?即使水果是甜点和甜点,我希望它只出现在这张桌子中一次.我希望产品出现在他们“最重要”的类别中(这就是我考虑“优先级”的原因).

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

感谢任何可能帮助我的人!
Kulgar

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读