У меня есть две модели с «has_many: через». Он работает хорошо, но мне нужно добавить уникальный порядок для каждой комбинации. Скажем, у нас есть модель поезда и вагоны (железнодорожный вагон) и каждый поезд имеет уникальную комбинацию вагоновRails 4+ has_many: через ассоциации с уникальным заказом
# /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 есть:
- первое место в поезде_1,
- второе место в т rain_2,
- Последнее место в поезде_3.
Это означает, что я не могу использовать такое решение https://stackoverflow.com/a/19138677/4801165, потому что у меня нет параметров для заказа вагонов.
В базе данных я вижу, что transport_ids сохраняет от 1 до 5 (от самого низкого до максимального id), так может быть решение для добавления идентификаторов по одному?
Надеюсь, что есть простой способ получить правильный порядок перевозки для каждого Поезда. Благодаря
У вас может быть таблица пользовательских позиций, а затем присоединиться и заказать. Существует также возможность делать индивидуальный заказ, но это будет беспорядочно, когда вы добавляете больше моделей. Вот [gist] (https://gist.github.com/cpjolicoeur/3590737), который касается именно этой темы –