我目前正在开发一个Rails应用程序,该应用程序使用两个模型运行:Recipes
和Categories
。它们都与 has_and_belongs_to_many 关系相关。
在食谱表格中,用户可以添加两个不同的类别(第一个将是主要类别,第二个将是次要类别)。
为了达到这个目的,我将以下代码添加到控制器中(在相应的视图中,它们分别是名为category [0]和category [1]的下拉菜单):
categories = params[:category]
categories.each do |c|
@recipe.categories << Category.find_by_id(c)
end
虽然这段代码有效,但它没有按预期工作,因为关联是由id排序构建的(例如,如果主要类别的id = 3且次要类型的id = 1,则它们的顺序将始终改变)。
使用<<
运算符时,有没有办法表明所需的顺序?有任何建议的修改吗?
答案 0 :(得分:1)
我认为您无法使用has_and_belongs_to_many
控制订购。至于我,我不喜欢使用这种参考,因为有一点灵活性。
我更喜欢(并建议您)使用“普通”模型/表来连接Recipe
和Category
。此模型(CategoryRecipe
)可以包含其他字段,例如position
或其他标记,例如main
。这种方式会给你很多好处。
答案 1 :(得分:0)
Rails has_and_belongs_to_many关联(实际上,所有Rails关联类型)都不是为了保持订单而设计的。但是,您可以使用acts_as_list gem将此功能添加到关联。
使用带有has_many的acts_as_list实现有序的has_and_belongs_to_many关联的示例可以在this question的答案中找到。