Ruby on rails 轨道4+;有很多:通过与唯一顺序的关联

Ruby on rails 轨道4+;有很多:通过与唯一顺序的关联,ruby-on-rails,ruby-on-rails-4,associations,Ruby On Rails,Ruby On Rails 4,Associations,我有两个模型与“有很多:通过”关联。它运行良好,但我需要为每个组合添加唯一的顺序。 假设我们有模型火车和车厢(火车车厢),每列火车都有独特的车厢组合 # /models/train.rb class Train < ActiveRecord::Base has_many :carriages, through: :combinations end # /models/carriage.rb class Carriage < ActiveRecord::Base has_ma

我有两个模型与“有很多:通过”关联。它运行良好,但我需要为每个组合添加唯一的顺序。 假设我们有模型火车和车厢(火车车厢),每列火车都有独特的车厢组合

# /models/train.rb
class Train < ActiveRecord::Base
  has_many :carriages, through: :combinations
end

# /models/carriage.rb
class Carriage < ActiveRecord::Base
  has_many :trains, through: :combinations
end

# /models/combination.rb
class Combination < ActiveRecord::Base
  belongs_to :train
  belongs_to :carriage
end

# /controllers/trains_controller.rb
class TrainsController < ApplicationController
  def shortcut_params
    params.require(:train).permit(:name, :description, carriage_ids: [])
  end
end

# /views/trains/_form.html.erb
<div class="field">
  <%= f.label :carriage_ids, 'Choose Carriages' %><br>
  <%= f.select :carriage_ids, Carriage.all.collect { |x| [x.name, x.id] }, {}, multiple: true, size: 6 %>
</div>
在本例中,车厢5具有:

  • 第1列第一名
  • 在列车2中排名第二
  • 列车3的最后一个位置
这意味着我不能使用这样的解决方案,因为我没有参数来订购车厢

在数据库中,我看到carries_id从1保存到5(从最低的id保存到最高的id),所以可能有一个逐个添加id的解决方案吗

我希望有一个简单的解决办法,为每列火车获得正确的车厢顺序。
谢谢

您可以将
位置
属性添加到您的
组合
模型中,表示
车厢
列车
中的位置

您可以将
位置
属性添加到
组合
模型中,表示
车厢
列车
内的位置

我尝试使用Fred Willmore advice,但如果使用嵌套表单手动添加每个元素,则不需要此附加列。
您可以在这里找到Gem,并将此指南用于标准Rails表单

我尝试使用Fred Willmore建议,但如果您使用嵌套表单手动添加每个元素,则不需要此附加列。
您可以在这里找到Gem,并将此指南与标准Rails表单一起使用

,您可以拥有一个自定义位置表,然后通过该表加入并订购。也可以定制订单,但是当你添加更多的型号时,会变得很混乱。这里有一个主题,你可以有一个自定义的positions表,然后根据它进行连接和排序。也可以定制订单,但是当你添加更多的型号时,会变得很混乱。这里有一个关于这个话题的例子
train_1 = carriage_5, carriage_4, carriage_1, carriage_3, carriage_2, carriage_6
train_2 = carriage_6, carriage_5, carriage_3, carriage_1, carriage_2, carriage_4
train_3 = carriage_1, carriage_2, carriage_3, carriage_4, carriage_6, carriage_5