如何通过连接表上的列来排序has_many关联

时间:2011-08-03 16:44:31

标签: ruby-on-rails

鉴于以下模型:

class Menu < ActiveRecord::Base
  has_many :items
end

class Items < ActiveRecord::Base
  has_and_belongs_to_many :menus
end

每个菜单都需要为其项目设置单独的排序顺序

我通常会在联接表menus_items

上添加sort_order列

我是否需要创建新模型来存储此信息并添加:through关系?

在Rails中设置它的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

是的,您需要创建一个新的MenuItem类和相关的menu_items表。

class Menu
   has_many :menu_items, :order => 'sort_order'
   has_many :items, :through => :menu_items
end

class MenuItem
   belongs_to :menu
   belongs_to :item
end

class Item
   has_many :menu_items
   has_many :menus, :through => :menu_items
end

您的menu_items表应包含menu_iditem_idsort_order的列(或您使用的任何内容作为排序列的名称)。但请记住,您需要处理sort_order的设置。您可以使用acts_as_list plugin或自己滚动逻辑,具体取决于您的要求。