我目前正在开发一个Rails应用程序,它运行两个模型:Recipes
和Categories
。它们都通过has_and_belongs_to_many关系相关联。
在Recipes表单中,用户可以添加两个不同的类别(第一个将是主要类别,第二个将是次要类别)。
为了达到这个目的,我在控制器中添加了以下代码(在相应的视图中,它们都是分别名为category[0]和category[1]的下拉菜单):categories = params[:category]
categories.each do |c|
@recipe.categories << Category.find_by_id(c)
end
虽然这段代码可以工作,但它并没有像我预期的那样工作,因为关联是通过id排序构建的(例如,如果主类别的id=3,次类别的id=1,它们的顺序将总是改变)。
在使用<<
操作符时,是否有一种方法来指示所需的顺序?有什么修改建议吗?
我不认为你可以使用has_and_belongs_to_many
控制排序。就我而言,我不喜欢使用这种推荐信,因为它有一点灵活性。
我更喜欢(并建议你)使用"正常"模型/表来连接Recipe
和Category
。这个模型(CategoryRecipe
)可以有额外的字段,如position
或额外的标志,如main
。这样会给你带来很多好处。
Rails的has_and_belongs_to_many关联(实际上是所有Rails关联类型)并不是设计为保持顺序的。但是,您可以使用acts_as_list gem将此功能添加到关联中。
使用acts_as_list和has_many实现有序的has_and_belongs_to_many关联的示例可以在这个问题的答案中找到。