【发布时间】:2016-10-18 06:42:04
【问题描述】:
我有两个具有“has_many :through”关联的模型。它工作得很好,但我需要为每个组合添加唯一的排序。 假设我们有模型 Train and Carriages (Railway Carriage),每列火车都有独特的车厢组合
# /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>
例如:
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
在这个例子中carriage_5有:
- train_1 第一名,
- train_2第二名,
- train_3 的最后一名。
这意味着我不能使用像https://stackoverflow.com/a/19138677/4801165这样的解决方案,因为我没有订购车厢的参数。
在数据库中我看到carriage_ids从1保存到5(从最低到最高的id),那么可能有解决方案来逐个添加id吗?
我希望有一个简单的解决方案可以为每辆火车正确安排车厢。 谢谢
【问题讨论】:
-
您可以有一个自定义职位表,然后加入并按此排序。也可以进行自定义订单,但是当您添加更多模型时会变得混乱。这是一个 gist 正是关于该主题
标签: ruby-on-rails ruby-on-rails-4 associations