在Ruby on Rails中尊重多对多关系中的赋值顺序

时间:2014-05-16 14:01:36

标签: ruby-on-rails ruby many-to-many rails-activerecord

我目前正在开发一个Rails应用程序,该应用程序使用两个模型运行:RecipesCategories。它们都与 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,则它们的顺序将始终改变)。

使用<<运算符时,有没有办法表明所需的顺序?有任何建议的修改吗?

2 个答案:

答案 0 :(得分:1)

我认为您无法使用has_and_belongs_to_many控制订购。至于我,我不喜欢使用这种参考,因为有一点灵活性。

我更喜欢(并建议您)使用“普通”模型/表来连接RecipeCategory。此模型(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的答案中找到。